redis 4.0.3 → 4.5.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.
Files changed (157) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +110 -0
  3. data/README.md +126 -17
  4. data/lib/redis/client.rb +130 -82
  5. data/lib/redis/cluster/command_loader.rb +8 -7
  6. data/lib/redis/cluster/node.rb +5 -1
  7. data/lib/redis/cluster/node_key.rb +3 -7
  8. data/lib/redis/cluster/node_loader.rb +2 -0
  9. data/lib/redis/cluster/option.rb +31 -14
  10. data/lib/redis/cluster/slot.rb +30 -13
  11. data/lib/redis/cluster/slot_loader.rb +6 -4
  12. data/lib/redis/cluster.rb +23 -17
  13. data/lib/redis/connection/command_helper.rb +5 -2
  14. data/lib/redis/connection/hiredis.rb +4 -3
  15. data/lib/redis/connection/registry.rb +2 -1
  16. data/lib/redis/connection/ruby.rb +139 -106
  17. data/lib/redis/connection/synchrony.rb +9 -4
  18. data/lib/redis/connection.rb +2 -0
  19. data/lib/redis/distributed.rb +171 -70
  20. data/lib/redis/errors.rb +2 -0
  21. data/lib/redis/hash_ring.rb +15 -14
  22. data/lib/redis/pipeline.rb +46 -8
  23. data/lib/redis/subscribe.rb +11 -12
  24. data/lib/redis/version.rb +3 -1
  25. data/lib/redis.rb +1239 -426
  26. metadata +16 -262
  27. data/.gitignore +0 -19
  28. data/.travis/Gemfile +0 -18
  29. data/.travis.yml +0 -61
  30. data/.yardopts +0 -3
  31. data/Gemfile +0 -8
  32. data/benchmarking/logging.rb +0 -71
  33. data/benchmarking/pipeline.rb +0 -51
  34. data/benchmarking/speed.rb +0 -21
  35. data/benchmarking/suite.rb +0 -24
  36. data/benchmarking/worker.rb +0 -71
  37. data/bin/build +0 -71
  38. data/bors.toml +0 -14
  39. data/examples/basic.rb +0 -15
  40. data/examples/consistency.rb +0 -114
  41. data/examples/dist_redis.rb +0 -43
  42. data/examples/incr-decr.rb +0 -17
  43. data/examples/list.rb +0 -26
  44. data/examples/pubsub.rb +0 -37
  45. data/examples/sentinel/sentinel.conf +0 -9
  46. data/examples/sentinel/start +0 -49
  47. data/examples/sentinel.rb +0 -41
  48. data/examples/sets.rb +0 -36
  49. data/examples/unicorn/config.ru +0 -3
  50. data/examples/unicorn/unicorn.rb +0 -20
  51. data/makefile +0 -74
  52. data/redis.gemspec +0 -43
  53. data/test/bitpos_test.rb +0 -63
  54. data/test/blocking_commands_test.rb +0 -40
  55. data/test/client_test.rb +0 -76
  56. data/test/cluster_abnormal_state_test.rb +0 -38
  57. data/test/cluster_blocking_commands_test.rb +0 -15
  58. data/test/cluster_client_internals_test.rb +0 -77
  59. data/test/cluster_client_key_hash_tags_test.rb +0 -88
  60. data/test/cluster_client_options_test.rb +0 -147
  61. data/test/cluster_client_pipelining_test.rb +0 -59
  62. data/test/cluster_client_replicas_test.rb +0 -36
  63. data/test/cluster_client_slots_test.rb +0 -94
  64. data/test/cluster_client_transactions_test.rb +0 -71
  65. data/test/cluster_commands_on_cluster_test.rb +0 -165
  66. data/test/cluster_commands_on_connection_test.rb +0 -40
  67. data/test/cluster_commands_on_geo_test.rb +0 -74
  68. data/test/cluster_commands_on_hashes_test.rb +0 -11
  69. data/test/cluster_commands_on_hyper_log_log_test.rb +0 -17
  70. data/test/cluster_commands_on_keys_test.rb +0 -134
  71. data/test/cluster_commands_on_lists_test.rb +0 -15
  72. data/test/cluster_commands_on_pub_sub_test.rb +0 -101
  73. data/test/cluster_commands_on_scripting_test.rb +0 -56
  74. data/test/cluster_commands_on_server_test.rb +0 -221
  75. data/test/cluster_commands_on_sets_test.rb +0 -39
  76. data/test/cluster_commands_on_sorted_sets_test.rb +0 -35
  77. data/test/cluster_commands_on_streams_test.rb +0 -196
  78. data/test/cluster_commands_on_strings_test.rb +0 -15
  79. data/test/cluster_commands_on_transactions_test.rb +0 -41
  80. data/test/cluster_commands_on_value_types_test.rb +0 -14
  81. data/test/command_map_test.rb +0 -28
  82. data/test/commands_on_geo_test.rb +0 -116
  83. data/test/commands_on_hashes_test.rb +0 -7
  84. data/test/commands_on_hyper_log_log_test.rb +0 -7
  85. data/test/commands_on_lists_test.rb +0 -7
  86. data/test/commands_on_sets_test.rb +0 -7
  87. data/test/commands_on_sorted_sets_test.rb +0 -7
  88. data/test/commands_on_strings_test.rb +0 -7
  89. data/test/commands_on_value_types_test.rb +0 -207
  90. data/test/connection_handling_test.rb +0 -275
  91. data/test/connection_test.rb +0 -57
  92. data/test/db/.gitkeep +0 -0
  93. data/test/distributed_blocking_commands_test.rb +0 -52
  94. data/test/distributed_commands_on_hashes_test.rb +0 -21
  95. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -26
  96. data/test/distributed_commands_on_lists_test.rb +0 -19
  97. data/test/distributed_commands_on_sets_test.rb +0 -105
  98. data/test/distributed_commands_on_sorted_sets_test.rb +0 -59
  99. data/test/distributed_commands_on_strings_test.rb +0 -79
  100. data/test/distributed_commands_on_value_types_test.rb +0 -129
  101. data/test/distributed_commands_requiring_clustering_test.rb +0 -162
  102. data/test/distributed_connection_handling_test.rb +0 -21
  103. data/test/distributed_internals_test.rb +0 -68
  104. data/test/distributed_key_tags_test.rb +0 -50
  105. data/test/distributed_persistence_control_commands_test.rb +0 -24
  106. data/test/distributed_publish_subscribe_test.rb +0 -90
  107. data/test/distributed_remote_server_control_commands_test.rb +0 -64
  108. data/test/distributed_scripting_test.rb +0 -100
  109. data/test/distributed_sorting_test.rb +0 -18
  110. data/test/distributed_test.rb +0 -56
  111. data/test/distributed_transactions_test.rb +0 -30
  112. data/test/encoding_test.rb +0 -14
  113. data/test/error_replies_test.rb +0 -57
  114. data/test/fork_safety_test.rb +0 -60
  115. data/test/helper.rb +0 -345
  116. data/test/helper_test.rb +0 -22
  117. data/test/internals_test.rb +0 -408
  118. data/test/lint/blocking_commands.rb +0 -174
  119. data/test/lint/hashes.rb +0 -203
  120. data/test/lint/hyper_log_log.rb +0 -74
  121. data/test/lint/lists.rb +0 -159
  122. data/test/lint/sets.rb +0 -282
  123. data/test/lint/sorted_sets.rb +0 -497
  124. data/test/lint/strings.rb +0 -348
  125. data/test/lint/value_types.rb +0 -130
  126. data/test/persistence_control_commands_test.rb +0 -24
  127. data/test/pipelining_commands_test.rb +0 -246
  128. data/test/publish_subscribe_test.rb +0 -280
  129. data/test/remote_server_control_commands_test.rb +0 -175
  130. data/test/scanning_test.rb +0 -407
  131. data/test/scripting_test.rb +0 -76
  132. data/test/sentinel_command_test.rb +0 -78
  133. data/test/sentinel_test.rb +0 -253
  134. data/test/sorting_test.rb +0 -57
  135. data/test/ssl_test.rb +0 -69
  136. data/test/support/cluster/orchestrator.rb +0 -199
  137. data/test/support/connection/hiredis.rb +0 -1
  138. data/test/support/connection/ruby.rb +0 -1
  139. data/test/support/connection/synchrony.rb +0 -17
  140. data/test/support/redis_mock.rb +0 -130
  141. data/test/support/ssl/gen_certs.sh +0 -31
  142. data/test/support/ssl/trusted-ca.crt +0 -25
  143. data/test/support/ssl/trusted-ca.key +0 -27
  144. data/test/support/ssl/trusted-cert.crt +0 -81
  145. data/test/support/ssl/trusted-cert.key +0 -28
  146. data/test/support/ssl/untrusted-ca.crt +0 -26
  147. data/test/support/ssl/untrusted-ca.key +0 -27
  148. data/test/support/ssl/untrusted-cert.crt +0 -82
  149. data/test/support/ssl/untrusted-cert.key +0 -28
  150. data/test/support/wire/synchrony.rb +0 -24
  151. data/test/support/wire/thread.rb +0 -5
  152. data/test/synchrony_driver.rb +0 -85
  153. data/test/test.conf.erb +0 -9
  154. data/test/thread_safety_test.rb +0 -60
  155. data/test/transactions_test.rb +0 -272
  156. data/test/unknown_commands_test.rb +0 -12
  157. data/test/url_param_test.rb +0 -136
data/test/lint/sets.rb DELETED
@@ -1,282 +0,0 @@
1
- module Lint
2
-
3
- module Sets
4
-
5
- def test_sadd
6
- assert_equal true, r.sadd("foo", "s1")
7
- assert_equal true, r.sadd("foo", "s2")
8
- assert_equal false, r.sadd("foo", "s1")
9
-
10
- assert_equal ["s1", "s2"], r.smembers("foo").sort
11
- end
12
-
13
- def test_variadic_sadd
14
- target_version "2.3.9" do # 2.4-rc6
15
- assert_equal 2, r.sadd("foo", ["s1", "s2"])
16
- assert_equal 1, r.sadd("foo", ["s1", "s2", "s3"])
17
-
18
- assert_equal ["s1", "s2", "s3"], r.smembers("foo").sort
19
- end
20
- end
21
-
22
- def test_srem
23
- r.sadd("foo", "s1")
24
- r.sadd("foo", "s2")
25
-
26
- assert_equal true, r.srem("foo", "s1")
27
- assert_equal false, r.srem("foo", "s3")
28
-
29
- assert_equal ["s2"], r.smembers("foo")
30
- end
31
-
32
- def test_variadic_srem
33
- target_version "2.3.9" do # 2.4-rc6
34
- r.sadd("foo", "s1")
35
- r.sadd("foo", "s2")
36
- r.sadd("foo", "s3")
37
-
38
- assert_equal 1, r.srem("foo", ["s1", "aaa"])
39
- assert_equal 0, r.srem("foo", ["bbb", "ccc" "ddd"])
40
- assert_equal 1, r.srem("foo", ["eee", "s3"])
41
-
42
- assert_equal ["s2"], r.smembers("foo")
43
- end
44
- end
45
-
46
- def test_spop
47
- r.sadd "foo", "s1"
48
- r.sadd "foo", "s2"
49
-
50
- assert ["s1", "s2"].include?(r.spop("foo"))
51
- assert ["s1", "s2"].include?(r.spop("foo"))
52
- assert_equal nil, r.spop("foo")
53
- end
54
-
55
- def test_spop_with_positive_count
56
- target_version "3.2.0" do
57
- r.sadd "foo", "s1"
58
- r.sadd "foo", "s2"
59
- r.sadd "foo", "s3"
60
- r.sadd "foo", "s4"
61
-
62
- pops = r.spop("foo", 3)
63
-
64
- assert !(["s1", "s2", "s3", "s4"] & pops).empty?
65
- assert_equal 3, pops.size
66
- assert_equal 1, r.scard("foo")
67
- end
68
- end
69
-
70
- def test_scard
71
- assert_equal 0, r.scard("foo")
72
-
73
- r.sadd "foo", "s1"
74
-
75
- assert_equal 1, r.scard("foo")
76
-
77
- r.sadd "foo", "s2"
78
-
79
- assert_equal 2, r.scard("foo")
80
- end
81
-
82
- def test_sismember
83
- assert_equal false, r.sismember("foo", "s1")
84
-
85
- r.sadd "foo", "s1"
86
-
87
- assert_equal true, r.sismember("foo", "s1")
88
- assert_equal false, r.sismember("foo", "s2")
89
- end
90
-
91
- def test_smembers
92
- assert_equal [], r.smembers("foo")
93
-
94
- r.sadd "foo", "s1"
95
- r.sadd "foo", "s2"
96
-
97
- assert_equal ["s1", "s2"], r.smembers("foo").sort
98
- end
99
-
100
- def test_srandmember
101
- r.sadd "foo", "s1"
102
- r.sadd "foo", "s2"
103
-
104
- 4.times do
105
- assert ["s1", "s2"].include?(r.srandmember("foo"))
106
- end
107
-
108
- assert_equal 2, r.scard("foo")
109
- end
110
-
111
- def test_srandmember_with_positive_count
112
- r.sadd "foo", "s1"
113
- r.sadd "foo", "s2"
114
- r.sadd "foo", "s3"
115
- r.sadd "foo", "s4"
116
-
117
- 4.times do
118
- assert !(["s1", "s2", "s3", "s4"] & r.srandmember("foo", 3)).empty?
119
-
120
- assert_equal 3, r.srandmember("foo", 3).size
121
- end
122
-
123
- assert_equal 4, r.scard("foo")
124
- end
125
-
126
- def test_srandmember_with_negative_count
127
- r.sadd "foo", "s1"
128
- r.sadd "foo", "s2"
129
- r.sadd "foo", "s3"
130
- r.sadd "foo", "s4"
131
-
132
- 4.times do
133
- assert !(["s1", "s2", "s3", "s4"] & r.srandmember("foo", -6)).empty?
134
- assert_equal 6, r.srandmember("foo", -6).size
135
- end
136
-
137
- assert_equal 4, r.scard("foo")
138
- end
139
-
140
- def test_smove
141
- r.sadd 'foo', 's1'
142
- r.sadd 'bar', 's2'
143
-
144
- assert r.smove('foo', 'bar', 's1')
145
- assert r.sismember('bar', 's1')
146
- end
147
-
148
- def test_sinter
149
- r.sadd 'foo', 's1'
150
- r.sadd 'foo', 's2'
151
- r.sadd 'bar', 's2'
152
-
153
- assert_equal ['s2'], r.sinter('foo', 'bar')
154
- end
155
-
156
- def test_variadic_smove_expand
157
- r.sadd('{1}foo', 's1')
158
- r.sadd('{1}foo', 's2')
159
- r.sadd('{1}foo', 's3')
160
- r.sadd('{1}bar', 's3')
161
- r.sadd('{1}bar', 's4')
162
- r.sadd('{1}bar', 's5')
163
- assert_equal true, r.smove('{1}foo', '{1}bar', 's2')
164
- end
165
-
166
- def test_variadic_sinter_expand
167
- r.sadd('{1}foo', 's1')
168
- r.sadd('{1}foo', 's2')
169
- r.sadd('{1}foo', 's3')
170
- r.sadd('{1}bar', 's3')
171
- r.sadd('{1}bar', 's4')
172
- r.sadd('{1}bar', 's5')
173
- assert_equal %w[s3], r.sinter('{1}foo', '{1}bar')
174
- end
175
-
176
- def test_sinterstore
177
- r.sadd 'foo', 's1'
178
- r.sadd 'foo', 's2'
179
- r.sadd 'bar', 's2'
180
-
181
- r.sinterstore('baz', 'foo', 'bar')
182
-
183
- assert_equal ['s2'], r.smembers('baz')
184
- end
185
-
186
- def test_variadic_sinterstore_expand
187
- r.sadd('{1}foo', 's1')
188
- r.sadd('{1}foo', 's2')
189
- r.sadd('{1}foo', 's3')
190
- r.sadd('{1}bar', 's3')
191
- r.sadd('{1}bar', 's4')
192
- r.sadd('{1}bar', 's5')
193
- assert_equal 1, r.sinterstore('{1}baz', '{1}foo', '{1}bar')
194
- end
195
-
196
- def test_sunion
197
- r.sadd 'foo', 's1'
198
- r.sadd 'foo', 's2'
199
- r.sadd 'bar', 's2'
200
- r.sadd 'bar', 's3'
201
-
202
- assert_equal %w[s1 s2 s3], r.sunion('foo', 'bar').sort
203
- end
204
-
205
- def test_variadic_sunion_expand
206
- r.sadd('{1}foo', 's1')
207
- r.sadd('{1}foo', 's2')
208
- r.sadd('{1}foo', 's3')
209
- r.sadd('{1}bar', 's3')
210
- r.sadd('{1}bar', 's4')
211
- r.sadd('{1}bar', 's5')
212
- assert_equal %w[s1 s2 s3 s4 s5], r.sunion('{1}foo', '{1}bar').sort
213
- end
214
-
215
- def test_sunionstore
216
- r.sadd 'foo', 's1'
217
- r.sadd 'foo', 's2'
218
- r.sadd 'bar', 's2'
219
- r.sadd 'bar', 's3'
220
-
221
- r.sunionstore('baz', 'foo', 'bar')
222
-
223
- assert_equal %w[s1 s2 s3], r.smembers('baz').sort
224
- end
225
-
226
- def test_variadic_sunionstore_expand
227
- r.sadd('{1}foo', 's1')
228
- r.sadd('{1}foo', 's2')
229
- r.sadd('{1}foo', 's3')
230
- r.sadd('{1}bar', 's3')
231
- r.sadd('{1}bar', 's4')
232
- r.sadd('{1}bar', 's5')
233
- assert_equal 5, r.sunionstore('{1}baz', '{1}foo', '{1}bar')
234
- end
235
-
236
- def test_sdiff
237
- r.sadd 'foo', 's1'
238
- r.sadd 'foo', 's2'
239
- r.sadd 'bar', 's2'
240
- r.sadd 'bar', 's3'
241
-
242
- assert_equal ['s1'], r.sdiff('foo', 'bar')
243
- assert_equal ['s3'], r.sdiff('bar', 'foo')
244
- end
245
-
246
- def test_variadic_sdiff_expand
247
- r.sadd('{1}foo', 's1')
248
- r.sadd('{1}foo', 's2')
249
- r.sadd('{1}foo', 's3')
250
- r.sadd('{1}bar', 's3')
251
- r.sadd('{1}bar', 's4')
252
- r.sadd('{1}bar', 's5')
253
- assert_equal %w[s1 s2], r.sdiff('{1}foo', '{1}bar').sort
254
- end
255
-
256
- def test_sdiffstore
257
- r.sadd 'foo', 's1'
258
- r.sadd 'foo', 's2'
259
- r.sadd 'bar', 's2'
260
- r.sadd 'bar', 's3'
261
-
262
- r.sdiffstore('baz', 'foo', 'bar')
263
-
264
- assert_equal ['s1'], r.smembers('baz')
265
- end
266
-
267
- def test_variadic_sdiffstore_expand
268
- r.sadd('{1}foo', 's1')
269
- r.sadd('{1}foo', 's2')
270
- r.sadd('{1}foo', 's3')
271
- r.sadd('{1}bar', 's3')
272
- r.sadd('{1}bar', 's4')
273
- r.sadd('{1}bar', 's5')
274
- assert_equal 2, r.sdiffstore('{1}baz', '{1}foo', '{1}bar')
275
- end
276
-
277
- def test_sscan
278
- r.sadd('foo', %w[1 2 3 foo foobar feelsgood])
279
- assert_equal %w[0 feelsgood foo foobar], r.sscan('foo', 0, match: 'f*').flatten.sort
280
- end
281
- end
282
- end