mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 12:20:41 +00:00
redis manager
This commit is contained in:
@@ -7,47 +7,32 @@ local redis = {}
|
||||
|
||||
local command = {}
|
||||
|
||||
redis.cmd = command
|
||||
|
||||
local function assert_redis(result, err, ...)
|
||||
assert(result, err)
|
||||
return err, ...
|
||||
end
|
||||
|
||||
setmetatable(command, { __index = function(t,k)
|
||||
local f = function(...)
|
||||
return assert_redis(skynet.call(".redis", skynet.unpack, skynet.pack(k, ...)))
|
||||
local cmd = string.upper(k)
|
||||
local f = function(self, ...)
|
||||
local err, result = skynet.call( self.__handle, skynet.unpack, skynet.pack(cmd, ...))
|
||||
assert(err, result)
|
||||
return result
|
||||
end
|
||||
t[k] = f
|
||||
return f
|
||||
end})
|
||||
|
||||
function command.EXISTS(key)
|
||||
local result , exists = skynet.call(".redis", skynet.unpack, skynet.pack("EXISTS", key))
|
||||
function command:exists(key)
|
||||
local result , exists = skynet.call( self.__handle, skynet.unpack, skynet.pack("EXISTS", key))
|
||||
assert(result, exists)
|
||||
exists = exists ~= 0
|
||||
return exists
|
||||
end
|
||||
|
||||
local function split(cmd)
|
||||
local cmds = {}
|
||||
for v in string.gmatch(cmd,"[^ ]+") do
|
||||
table.insert(cmds,v)
|
||||
end
|
||||
return unpack(cmds)
|
||||
end
|
||||
local meta = {
|
||||
__index = command
|
||||
}
|
||||
|
||||
local function send_command(cmd, ...)
|
||||
return command[cmd](...)
|
||||
end
|
||||
|
||||
|
||||
function redis.send(cmd, more, ...)
|
||||
if more == nil then
|
||||
send_command(split(cmd))
|
||||
else
|
||||
send_command(cmd, more, ...)
|
||||
end
|
||||
function redis.connect(dbname)
|
||||
local handle = skynet.call(".redis-manager",dbname)
|
||||
assert(handle ~= "")
|
||||
return setmetatable({ __handle = handle } , meta)
|
||||
end
|
||||
|
||||
return redis
|
||||
|
||||
@@ -16,7 +16,7 @@ skynet.start(function()
|
||||
print("simpledb",db)
|
||||
local connection = skynet.launch("connection","256")
|
||||
print("connection",connection)
|
||||
local redis = skynet.call(".launcher", "broker .redis snlua redis-cli 127.0.0.1:6379 0")
|
||||
local redis = skynet.launch("snlua","redis-mgr")
|
||||
print("redis",redis)
|
||||
skynet.exit()
|
||||
end)
|
||||
|
||||
27
service/redis-mgr.lua
Normal file
27
service/redis-mgr.lua
Normal file
@@ -0,0 +1,27 @@
|
||||
local skynet = require "skynet"
|
||||
local log = require "log"
|
||||
|
||||
local name = {
|
||||
main = "127.0.0.1:6379",
|
||||
}
|
||||
|
||||
local connection = {}
|
||||
|
||||
skynet.dispatch(function(msg, sz , session, from)
|
||||
local dbname = skynet.tostring(msg,sz)
|
||||
if connection[dbname] then
|
||||
skynet.ret(connection[dbname])
|
||||
return
|
||||
end
|
||||
if name[dbname] == nil then
|
||||
log.Error("Invalid db name : "..dbname)
|
||||
skynet.ret("")
|
||||
return
|
||||
end
|
||||
|
||||
local redis_cli = skynet.launch("snlua", "redis-cli", name[dbname])
|
||||
connection[dbname] = redis_cli
|
||||
skynet.ret(redis_cli)
|
||||
end)
|
||||
|
||||
skynet.register ".redis-manager"
|
||||
@@ -4,9 +4,10 @@ local redis = require "redis"
|
||||
skynet.dispatch()
|
||||
|
||||
skynet.start(function()
|
||||
print(redis.cmd.EXISTS("A"))
|
||||
print(redis.cmd.GET("A"))
|
||||
print(redis.cmd.SET("A","hello world"))
|
||||
local db = redis.connect "main"
|
||||
print(db:exists "A")
|
||||
print(db:get "A")
|
||||
print(db:set("A","hello world"))
|
||||
skynet.exit()
|
||||
end)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user