redisdb_slave.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. local skynet = require "skynet"
  2. require "skynet.manager"
  3. local redis = require "skynet.db.redis"
  4. local CMD = {}
  5. local db = nil
  6. function CMD.start(cnf)
  7. -- DEBUG("redis slave cnf = ", DUMP(cnf))
  8. local ok, d = pcall(redis.connect, cnf)
  9. if ok then
  10. db = d
  11. -- db:flushall()
  12. else
  13. ERROR("---redis connect error---", inspect(cnf) )
  14. end
  15. skynet.fork(function()
  16. while true do
  17. local ping = db:ping()
  18. -- DEBUG("ping = ", ping)
  19. skynet.sleep(1000)
  20. end
  21. end)
  22. end
  23. function CMD.set(key, value, type, time)
  24. if type ~= nil then
  25. return db:set(key, value, type, time)
  26. else
  27. return db:set(key,value)
  28. end
  29. end
  30. function CMD.expire(key, ex)
  31. return db:expire(key, ex)
  32. end
  33. function CMD.get(key)
  34. return db:get(key)
  35. end
  36. function CMD.hmset(key, t)
  37. local data = {}
  38. for k, v in pairs(t) do
  39. table.insert(data, k)
  40. table.insert(data, v)
  41. end
  42. return db:hmset(key, table.unpack(data))
  43. end
  44. function CMD.hmget(key, ...)
  45. return db:hmget(key, ...)
  46. end
  47. function CMD.hset(key, filed, value)
  48. return db:hset(key,filed,value)
  49. end
  50. function CMD.hget(key, filed)
  51. return db:hget(key, filed)
  52. end
  53. function CMD.hgetall(key)
  54. return db:hgetall(key)
  55. end
  56. function CMD.zadd(...)
  57. return db:zadd(...)
  58. end
  59. function CMD.keys(key)
  60. return db:keys(key)
  61. end
  62. function CMD.zrange(key, from, to, scores)
  63. if not scores then
  64. return db:zrange(key, from, to)
  65. else
  66. return db:zrange(key, from, to, scores)
  67. end
  68. end
  69. function CMD.zincrby(key, score, member)
  70. return db:zincrby(key, score, member)
  71. end
  72. function CMD.zrevrange(key, from, to, scores)
  73. if not scores then
  74. return db:zrevrange(key,from,to)
  75. else
  76. return db:zrevrange(key,from,to,scores)
  77. end
  78. end
  79. function CMD.zrangebyscore(key, from, to, scores, limit, offset, count)
  80. if not scores then
  81. if not limit then
  82. return db:zrangebyscore(key,from,to)
  83. else
  84. return db:zrangebyscore(key,from,to, limit,offset, count)
  85. end
  86. else
  87. if not limit then
  88. return db:zrangebyscore(key,from,to,scores)
  89. else
  90. return db:zrangebyscore(key,from,to,scores,limit, offset, count)
  91. end
  92. end
  93. end
  94. function CMD.zrevrangebyscore(key, max, min, scores, limit, offset, count)
  95. if not scores then
  96. if not limit then
  97. return db:zrevrangebyscore(key, max, min)
  98. else
  99. return db:zrevrangebyscore(key,max, min, limit, offset, count)
  100. end
  101. else
  102. if not limit then
  103. return db:zrevrangebyscore(key,max, min,scores)
  104. else
  105. return db:zrevrangebyscore(key,max, min,scores,limit, offset, count)
  106. end
  107. end
  108. end
  109. function CMD.zrank(key, member)
  110. return db:zrank(key,member)
  111. end
  112. function CMD.zrevrank(key, member)
  113. return db:zrevrank(key,member)
  114. end
  115. function CMD.zscore(key, member)
  116. return db:zscore(key, member)
  117. end
  118. function CMD.zcount(key, from, to)
  119. return db:zcount(key,from,to)
  120. end
  121. function CMD.zcard(key)
  122. return db:zcard(key)
  123. end
  124. function CMD.incr(key)
  125. return db:incr(key)
  126. end
  127. function CMD.del(key)
  128. return db:del(key)
  129. end
  130. function CMD.hexists(key )
  131. local r = db:hexists(key)
  132. return r == 1 and true or false
  133. end
  134. function CMD.exists(key)
  135. return db:exists(key) == 1
  136. end
  137. function CMD.hdel(... )
  138. return db:hdel(...)
  139. end
  140. function CMD.hincrby(key, field, increment)
  141. return tonumber(db:hincrby(key, field, increment))
  142. end
  143. function CMD.incrby(key, increment)
  144. return tonumber(db:incrby(key, increment))
  145. end
  146. function CMD.setnx(key, value)
  147. return db:setnx(key, value) == 1
  148. end
  149. function CMD.hsetnx(key, field, value)
  150. return db:hsetnx(key, field, value) == 1
  151. end
  152. function CMD.hkeys(key)
  153. return db:hkeys(key)
  154. end
  155. function CMD.getbit(key, offset)
  156. return db:getbit(key, offset)
  157. end
  158. function CMD.setbit(key, offset, value)
  159. return db:setbit(key, offset, value)
  160. end
  161. function CMD.eval(...)
  162. return db:eval(...)
  163. end
  164. skynet.start(function()
  165. skynet.dispatch("lua", function(_, _, cmd, ...)
  166. -- DEBUG("redis slave cmd = ", cmd)
  167. local f = assert(CMD[cmd], cmd .. " not found")
  168. skynet.retpack(f(...))
  169. end)
  170. end)