Skip to content

Commit dbb9eaf

Browse files
committed
Rotate slaves
1 parent 03dff6d commit dbb9eaf

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

lib/resty/redis/connector.lua

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ redis.add_commands("sentinel")
3939
local get_master = require("resty.redis.sentinel").get_master
4040
local get_slaves = require("resty.redis.sentinel").get_slaves
4141

42+
local slave_rr_counter = 0
4243

4344
-- A metatable which prevents undefined fields from being created / accessed
4445
local fixed_field_metatable = {
@@ -262,6 +263,19 @@ function _M.connect(self, params)
262263
end
263264

264265

266+
local function rotate_slaves(slaves)
267+
local rotated_slaves = {}
268+
local local_rr_counter = (slave_rr_counter + 1) % #slaves
269+
slave_rr_counter = local_rr_counter
270+
271+
for i, _ in ipairs(slaves) do
272+
local_rr_counter = (local_rr_counter % #slaves) + 1
273+
rotated_slaves[i] = slaves[local_rr_counter]
274+
end
275+
276+
return rotated_slaves
277+
end
278+
265279
local function sort_by_localhost(a, b)
266280
if a.host == "127.0.0.1" and b.host ~= "127.0.0.1" then
267281
return true
@@ -319,6 +333,7 @@ function _M.connect_via_sentinel(self, params)
319333

320334
sentnl:set_keepalive()
321335

336+
slaves = rotate_slaves(slaves)
322337
-- Put any slaves on 127.0.0.1 at the front
323338
tbl_sort(slaves, sort_by_localhost)
324339

0 commit comments

Comments
 (0)