mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
redis manager
This commit is contained in:
@@ -7,47 +7,32 @@ local redis = {}
|
|||||||
|
|
||||||
local command = {}
|
local command = {}
|
||||||
|
|
||||||
redis.cmd = command
|
|
||||||
|
|
||||||
local function assert_redis(result, err, ...)
|
|
||||||
assert(result, err)
|
|
||||||
return err, ...
|
|
||||||
end
|
|
||||||
|
|
||||||
setmetatable(command, { __index = function(t,k)
|
setmetatable(command, { __index = function(t,k)
|
||||||
local f = function(...)
|
local cmd = string.upper(k)
|
||||||
return assert_redis(skynet.call(".redis", skynet.unpack, skynet.pack(k, ...)))
|
local f = function(self, ...)
|
||||||
|
local err, result = skynet.call( self.__handle, skynet.unpack, skynet.pack(cmd, ...))
|
||||||
|
assert(err, result)
|
||||||
|
return result
|
||||||
end
|
end
|
||||||
t[k] = f
|
t[k] = f
|
||||||
return f
|
return f
|
||||||
end})
|
end})
|
||||||
|
|
||||||
function command.EXISTS(key)
|
function command:exists(key)
|
||||||
local result , exists = skynet.call(".redis", skynet.unpack, skynet.pack("EXISTS", key))
|
local result , exists = skynet.call( self.__handle, skynet.unpack, skynet.pack("EXISTS", key))
|
||||||
assert(result, exists)
|
assert(result, exists)
|
||||||
exists = exists ~= 0
|
exists = exists ~= 0
|
||||||
return exists
|
return exists
|
||||||
end
|
end
|
||||||
|
|
||||||
local function split(cmd)
|
local meta = {
|
||||||
local cmds = {}
|
__index = command
|
||||||
for v in string.gmatch(cmd,"[^ ]+") do
|
}
|
||||||
table.insert(cmds,v)
|
|
||||||
end
|
|
||||||
return unpack(cmds)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function send_command(cmd, ...)
|
function redis.connect(dbname)
|
||||||
return command[cmd](...)
|
local handle = skynet.call(".redis-manager",dbname)
|
||||||
end
|
assert(handle ~= "")
|
||||||
|
return setmetatable({ __handle = handle } , meta)
|
||||||
|
|
||||||
function redis.send(cmd, more, ...)
|
|
||||||
if more == nil then
|
|
||||||
send_command(split(cmd))
|
|
||||||
else
|
|
||||||
send_command(cmd, more, ...)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return redis
|
return redis
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ skynet.start(function()
|
|||||||
print("simpledb",db)
|
print("simpledb",db)
|
||||||
local connection = skynet.launch("connection","256")
|
local connection = skynet.launch("connection","256")
|
||||||
print("connection",connection)
|
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)
|
print("redis",redis)
|
||||||
skynet.exit()
|
skynet.exit()
|
||||||
end)
|
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.dispatch()
|
||||||
|
|
||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
print(redis.cmd.EXISTS("A"))
|
local db = redis.connect "main"
|
||||||
print(redis.cmd.GET("A"))
|
print(db:exists "A")
|
||||||
print(redis.cmd.SET("A","hello world"))
|
print(db:get "A")
|
||||||
|
print(db:set("A","hello world"))
|
||||||
skynet.exit()
|
skynet.exit()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user