diff --git a/lualib/redis.lua b/lualib/redis.lua index 4697c24d..e436657d 100644 --- a/lualib/redis.lua +++ b/lualib/redis.lua @@ -19,8 +19,15 @@ local meta = { } function redis.connect(dbname) - local fd = socket.open(name[dbname]) - return setmetatable( { __handle = fd, __mode = false }, meta ) + local db_conf = name[dbname] + local fd = socket.open(db_conf.host, db_conf.port or 6379) + assert(fd) + local r = setmetatable( { __handle = fd, __mode = false }, meta ) + if db_conf.db ~= nil then + r:select(db_conf.db) + end + + return r end function command:disconnect() @@ -108,7 +115,8 @@ setmetatable(command, { __index = function(t,k) socket.write(fd, compose_message { cmd, ... }) local ok, ret = read_response(fd) socket.unlock(fd) - return ok, ret + assert(ok, ret) + return ret end end t[k] = f @@ -127,6 +135,13 @@ function command:exists(key) return exists end +function command:sismember(key, value) + assert(not batch, "sismember can't used in batch mode") + local result, ismember = skynet.call( self.__handle, "lua" , "SISMEMBER", key, value) + assert(result, ismember) + return ismember ~= 0 +end + function command:batch(mode) if mode == "end" then local fd = self.__handle diff --git a/lualib/socket.lua b/lualib/socket.lua index 3951a9d7..74ec3a81 100644 --- a/lualib/socket.lua +++ b/lualib/socket.lua @@ -157,8 +157,6 @@ function socket.readline(fd, sep) end function socket.write(fd, msg, sz) - assert(coroutine.running() == READTHREAD[fd], "call socket.lock first") - skynet.send(".socket", "client", fd, msg, sz) end diff --git a/redisconf b/redisconf index 971fa540..1600a38d 100644 --- a/redisconf +++ b/redisconf @@ -1,2 +1,2 @@ -main = "127.0.0.1:6379" +main = { host = "127.0.0.1" , port = 6379 } diff --git a/service/console.lua b/service/console.lua index c95abae1..86bf6cc1 100644 --- a/service/console.lua +++ b/service/console.lua @@ -1,15 +1,21 @@ local skynet = require "skynet" local socket = require "socket" -skynet.start(function() +local function console_main_loop() local stdin = socket.stdin() socket.lock(stdin) while true do local cmdline = socket.readline(stdin, "\n") - local handle = skynet.newservice(cmdline) - if handle == nil then - print("Launch error:",cmdline) + if cmdline ~= "" then + local handle = skynet.newservice(cmdline) + if handle == nil then + print("Launch error:",cmdline) + end end end socket.unlock(stdin) +end + +skynet.start(function() + skynet.fork(console_main_loop) end)