Commit 922ce27a77367f095107220737ef2eb9c097a014
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 |