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 5  
6 6 local redisproxy = {}
7 7  
  8 +
  9 +local isUsePika = false
  10 +
  11 +
8 12 setmetatable(redisproxy, { __index = function(t, k)
9 13 local cmd = string.upper(k)
10 14 local f = function (self, ...)
... ... @@ -38,14 +42,61 @@ function redisproxy:runScripts(name, ...)
38 42 end
39 43  
40 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 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 96 end
48 97  
  98 +else
  99 +
49 100 function redisproxy:insertEmail(params)
50 101 local pms = {
51 102 roleId = params.roleId,
... ... @@ -64,4 +115,7 @@ function redisproxy:insertEmail(params)
64 115 return true
65 116 end
66 117  
  118 +
  119 +end
  120 +
67 121 return redisproxy
68 122 \ No newline at end of file
... ...