redis-cluster 1.0.0.pre.rc.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/redis_cluster/cluster.rb +22 -2
- data/lib/redis_cluster/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 328dcd9bbc349a36b70a5f91bc16c69345bef62c
|
4
|
+
data.tar.gz: 32720a7f55ac9b912878eaf3a287bb940000f461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e35a19038dfac92f8c0968f44bf442a9eb225b324d2a066aed1aa83e110ea840582113cbda262e0c6323ccaac955eb6f8921b85585d8c91f602adba1913d863
|
7
|
+
data.tar.gz: 182e883b1fc704db0f1d8e2737fe9a1cc87209d37bf53dc2976f917d427d0ccf4cf400fcb7e7338119ec9e351aa8ed6aa7e62a909a5a209a4aa330a971e6bf98
|
@@ -18,6 +18,7 @@ class RedisCluster
|
|
18
18
|
@replicas = nil
|
19
19
|
@client_creater = block
|
20
20
|
|
21
|
+
@buffer = []
|
21
22
|
init_client(seeds)
|
22
23
|
end
|
23
24
|
|
@@ -41,9 +42,9 @@ class RedisCluster
|
|
41
42
|
when :master
|
42
43
|
slots[slot].first
|
43
44
|
when :slave
|
44
|
-
slots[slot]
|
45
|
+
pick_client(slots[slot], skip: 1) || slots[slot].first
|
45
46
|
when :master_slave
|
46
|
-
slots[slot]
|
47
|
+
pick_client(slots[slot])
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
@@ -81,6 +82,24 @@ class RedisCluster
|
|
81
82
|
|
82
83
|
private
|
83
84
|
|
85
|
+
def pick_client(pool, skip: 0)
|
86
|
+
unhealthy_count = 0
|
87
|
+
|
88
|
+
(skip...pool.length).each do |i|
|
89
|
+
if pool[i].healthy
|
90
|
+
@buffer[i - skip] = pool[i]
|
91
|
+
else
|
92
|
+
unhealthy_count += 1
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
buffer_length = pool.length - skip - unhealthy_count
|
97
|
+
return nil if buffer_length.zero?
|
98
|
+
|
99
|
+
i = rand(buffer_length)
|
100
|
+
@buffer[i]
|
101
|
+
end
|
102
|
+
|
84
103
|
def slots_and_clients(client)
|
85
104
|
replicas = ::Hash.new{ |h, k| h[k] = [] }
|
86
105
|
|
@@ -107,6 +126,7 @@ class RedisCluster
|
|
107
126
|
end
|
108
127
|
end
|
109
128
|
|
129
|
+
@buffer = Array.new(clients.length) if clients.length > @buffer.length
|
110
130
|
@replicas = replicas
|
111
131
|
end
|
112
132
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bukalapak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -61,9 +61,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
61
|
version: '0'
|
62
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - "
|
64
|
+
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: '0'
|
67
67
|
requirements: []
|
68
68
|
rubyforge_project:
|
69
69
|
rubygems_version: 2.5.1
|