Commit 922ce27a77367f095107220737ef2eb9c097a014

Authored by zhouhaihai
1 parent c6940d28

pika 判断

Showing 1 changed file with 59 additions and 5 deletions   Show diff stats
src/shared/redisproxy.lua
@@ -5,6 +5,10 @@ local table_insert = table.insert @@ -5,6 +5,10 @@ local table_insert = table.insert
5 5
6 local redisproxy = {} 6 local redisproxy = {}
7 7
  8 +
  9 +local isUsePika = false
  10 +
  11 +
8 setmetatable(redisproxy, { __index = function(t, k) 12 setmetatable(redisproxy, { __index = function(t, k)
9 local cmd = string.upper(k) 13 local cmd = string.upper(k)
10 local f = function (self, ...) 14 local f = function (self, ...)
@@ -38,14 +42,61 @@ function redisproxy:runScripts(name, ...) @@ -38,14 +42,61 @@ function redisproxy:runScripts(name, ...)
38 end 42 end
39 43
40 local meta = {__index = function (tab, name) return function (_, ...) tab[#tab+1]={name, ...} end end} 44 local meta = {__index = function (tab, name) return function (_, ...) tab[#tab+1]={name, ...} end end}
41 -function redisproxy:pipelining(block)  
42 - local ops = setmetatable({{"multi"}}, meta) 45 +function redisproxy:pipelining(block, transaction)
  46 + if transaction == nil then transaction = true end -- 默认具有事务性
  47 + if isUsePika then transaction = false end
  48 +
  49 + local ops = setmetatable({}, meta)
  50 + if transaction then
  51 + ops[#ops+1]={"multi"}
  52 + end
43 block(ops) 53 block(ops)
44 - if #ops == 1 then return end  
45 - ops[#ops+1]={"exec"}  
46 - return self:pipeline(ops) 54 + if transaction then
  55 + if #ops == 1 then return end
  56 + ops[#ops+1]={"exec"}
  57 + else
  58 + if #ops == 0 then return end
  59 + end
  60 + return self:pipeline(ops, transaction)
  61 +end
  62 +
  63 +if isUsePika then
  64 +
  65 +function redisproxy:insertEmail(params)
  66 + local roleId = params.roleId
  67 + local emailId = params.emailId
  68 + local createtime = params.createtime or skynet.timex()
  69 + local contentPms = params.contentPms or {}
  70 + local rewardPms = params.rewardPms or {}
  71 + local title = params.title or ""
  72 + local stitle = params.stitle or ""
  73 + local content = params.content or ""
  74 + local attachments = params.attachments or ""
  75 +
  76 + local id = self:HINCRBY(string.format("role:%d:autoincr", roleId), "email", 1)
  77 + self:LPUSH(string.format("role:%d:emailIds", roleId), id)
  78 + local deleteIds = self:LRANGE(string.format("role:%d:emailIds", roleId), EMAIL_LIMIT, -1)
  79 + self:pipelining(function(red)
  80 + for _, deleteId in ipairs(deleteIds) do
  81 + red:DEL(string.format("email:%d:%d", roleId, deleteId))
  82 + end
  83 + red:LTRIM(string.format("role:%d:emailIds", roleId), 0, EMAIL_LIMIT - 1)
  84 + red:HMSET(string.format("email:%d:%d", roleId, id),
  85 + "id", tostring(id),
  86 + "emailId", emailId,
  87 + "status", "0",
  88 + "createtime", createtime,
  89 + "contentPms", MsgPack.pack(contentPms),
  90 + "rewardPms", MsgPack.pack(rewardPms),
  91 + "title", title,
  92 + "stitle", stitle,
  93 + "content", content,
  94 + "attachments", attachments)
  95 + end)
47 end 96 end
48 97
  98 +else
  99 +
49 function redisproxy:insertEmail(params) 100 function redisproxy:insertEmail(params)
50 local pms = { 101 local pms = {
51 roleId = params.roleId, 102 roleId = params.roleId,
@@ -64,4 +115,7 @@ function redisproxy:insertEmail(params) @@ -64,4 +115,7 @@ function redisproxy:insertEmail(params)
64 return true 115 return true
65 end 116 end
66 117
  118 +
  119 +end
  120 +
67 return redisproxy 121 return redisproxy
68 \ No newline at end of file 122 \ No newline at end of file