redis 3.0.0 → 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 (106) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +315 -0
  3. data/README.md +301 -58
  4. data/lib/redis/client.rb +383 -88
  5. data/lib/redis/cluster/command.rb +81 -0
  6. data/lib/redis/cluster/command_loader.rb +33 -0
  7. data/lib/redis/cluster/key_slot_converter.rb +72 -0
  8. data/lib/redis/cluster/node.rb +108 -0
  9. data/lib/redis/cluster/node_key.rb +31 -0
  10. data/lib/redis/cluster/node_loader.rb +37 -0
  11. data/lib/redis/cluster/option.rb +93 -0
  12. data/lib/redis/cluster/slot.rb +86 -0
  13. data/lib/redis/cluster/slot_loader.rb +49 -0
  14. data/lib/redis/cluster.rb +291 -0
  15. data/lib/redis/connection/command_helper.rb +7 -10
  16. data/lib/redis/connection/hiredis.rb +12 -8
  17. data/lib/redis/connection/registry.rb +2 -1
  18. data/lib/redis/connection/ruby.rb +266 -74
  19. data/lib/redis/connection/synchrony.rb +41 -14
  20. data/lib/redis/connection.rb +4 -2
  21. data/lib/redis/distributed.rb +258 -76
  22. data/lib/redis/errors.rb +48 -0
  23. data/lib/redis/hash_ring.rb +31 -73
  24. data/lib/redis/pipeline.rb +74 -18
  25. data/lib/redis/subscribe.rb +24 -13
  26. data/lib/redis/version.rb +3 -1
  27. data/lib/redis.rb +2068 -464
  28. metadata +63 -160
  29. data/.gitignore +0 -10
  30. data/.order +0 -169
  31. data/.travis/Gemfile +0 -11
  32. data/.travis.yml +0 -50
  33. data/.yardopts +0 -3
  34. data/Rakefile +0 -392
  35. data/benchmarking/logging.rb +0 -62
  36. data/benchmarking/pipeline.rb +0 -51
  37. data/benchmarking/speed.rb +0 -21
  38. data/benchmarking/suite.rb +0 -24
  39. data/benchmarking/worker.rb +0 -71
  40. data/examples/basic.rb +0 -15
  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 -31
  45. data/examples/sets.rb +0 -36
  46. data/examples/unicorn/config.ru +0 -3
  47. data/examples/unicorn/unicorn.rb +0 -20
  48. data/redis.gemspec +0 -41
  49. data/test/blocking_commands_test.rb +0 -42
  50. data/test/command_map_test.rb +0 -30
  51. data/test/commands_on_hashes_test.rb +0 -21
  52. data/test/commands_on_lists_test.rb +0 -20
  53. data/test/commands_on_sets_test.rb +0 -77
  54. data/test/commands_on_sorted_sets_test.rb +0 -109
  55. data/test/commands_on_strings_test.rb +0 -83
  56. data/test/commands_on_value_types_test.rb +0 -99
  57. data/test/connection_handling_test.rb +0 -189
  58. data/test/db/.gitignore +0 -1
  59. data/test/distributed_blocking_commands_test.rb +0 -46
  60. data/test/distributed_commands_on_hashes_test.rb +0 -10
  61. data/test/distributed_commands_on_lists_test.rb +0 -22
  62. data/test/distributed_commands_on_sets_test.rb +0 -83
  63. data/test/distributed_commands_on_sorted_sets_test.rb +0 -18
  64. data/test/distributed_commands_on_strings_test.rb +0 -48
  65. data/test/distributed_commands_on_value_types_test.rb +0 -87
  66. data/test/distributed_commands_requiring_clustering_test.rb +0 -148
  67. data/test/distributed_connection_handling_test.rb +0 -23
  68. data/test/distributed_internals_test.rb +0 -15
  69. data/test/distributed_key_tags_test.rb +0 -52
  70. data/test/distributed_persistence_control_commands_test.rb +0 -26
  71. data/test/distributed_publish_subscribe_test.rb +0 -92
  72. data/test/distributed_remote_server_control_commands_test.rb +0 -53
  73. data/test/distributed_scripting_test.rb +0 -102
  74. data/test/distributed_sorting_test.rb +0 -20
  75. data/test/distributed_test.rb +0 -58
  76. data/test/distributed_transactions_test.rb +0 -32
  77. data/test/encoding_test.rb +0 -18
  78. data/test/error_replies_test.rb +0 -59
  79. data/test/helper.rb +0 -188
  80. data/test/helper_test.rb +0 -22
  81. data/test/internals_test.rb +0 -214
  82. data/test/lint/blocking_commands.rb +0 -124
  83. data/test/lint/hashes.rb +0 -162
  84. data/test/lint/lists.rb +0 -143
  85. data/test/lint/sets.rb +0 -96
  86. data/test/lint/sorted_sets.rb +0 -201
  87. data/test/lint/strings.rb +0 -157
  88. data/test/lint/value_types.rb +0 -106
  89. data/test/persistence_control_commands_test.rb +0 -26
  90. data/test/pipelining_commands_test.rb +0 -195
  91. data/test/publish_subscribe_test.rb +0 -153
  92. data/test/remote_server_control_commands_test.rb +0 -104
  93. data/test/scripting_test.rb +0 -78
  94. data/test/sorting_test.rb +0 -45
  95. data/test/support/connection/hiredis.rb +0 -1
  96. data/test/support/connection/ruby.rb +0 -1
  97. data/test/support/connection/synchrony.rb +0 -17
  98. data/test/support/redis_mock.rb +0 -92
  99. data/test/support/wire/synchrony.rb +0 -24
  100. data/test/support/wire/thread.rb +0 -5
  101. data/test/synchrony_driver.rb +0 -57
  102. data/test/test.conf +0 -9
  103. data/test/thread_safety_test.rb +0 -32
  104. data/test/transactions_test.rb +0 -244
  105. data/test/unknown_commands_test.rb +0 -14
  106. data/test/url_param_test.rb +0 -64
data/Rakefile DELETED
@@ -1,392 +0,0 @@
1
- require 'rubygems'
2
- require 'rubygems/package_task'
3
- require 'rake/testtask'
4
-
5
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
6
- require 'redis/version'
7
-
8
- REDIS_DIR = File.expand_path(File.join("..", "test"), __FILE__)
9
- REDIS_CNF = File.join(REDIS_DIR, "test.conf")
10
- REDIS_PID = File.join(REDIS_DIR, "db", "redis.pid")
11
-
12
- task :default => :run
13
-
14
- desc "Run tests and manage server start/stop"
15
- task :run => [:start, :test, :stop]
16
-
17
- desc "Start the Redis server"
18
- task :start do
19
- redis_running = \
20
- begin
21
- File.exists?(REDIS_PID) && Process.kill(0, File.read(REDIS_PID).to_i)
22
- rescue Errno::ESRCH
23
- FileUtils.rm REDIS_PID
24
- false
25
- end
26
-
27
- unless redis_running
28
- unless system("which redis-server")
29
- STDERR.puts "redis-server not in PATH"
30
- exit 1
31
- end
32
-
33
- unless system("redis-server #{REDIS_CNF}")
34
- STDERR.puts "could not start redis-server"
35
- exit 1
36
- end
37
- end
38
- end
39
-
40
- desc "Stop the Redis server"
41
- task :stop do
42
- if File.exists?(REDIS_PID)
43
- Process.kill "INT", File.read(REDIS_PID).to_i
44
- FileUtils.rm REDIS_PID
45
- end
46
- end
47
-
48
- Rake::TestTask.new do |t|
49
- t.options = "-v"
50
- t.libs << "test"
51
- t.test_files = FileList["test/*_test.rb"]
52
- end
53
-
54
- task :doc => ["doc:generate", "doc:prepare"]
55
-
56
- namespace :doc do
57
- task :generate do
58
- require "shellwords"
59
-
60
- `rm -rf doc`
61
-
62
- current_branch = `git branch`[/^\* (.*)$/, 1]
63
-
64
- begin
65
- tags = `git tag -l`.split("\n").sort.reverse
66
-
67
- tags.each do |tag|
68
- `git checkout -q #{tag} 2>/dev/null`
69
-
70
- unless $?.success?
71
- $stderr.puts "Need a clean working copy. Please git-stash away."
72
- exit 1
73
- end
74
-
75
- puts tag
76
-
77
- `mkdir -p doc/#{tag}`
78
-
79
- files = `git ls-tree -r HEAD lib`.split("\n").map do |line|
80
- line[/\t(.*)$/, 1]
81
- end
82
-
83
- opts = [
84
- "--title", "A Ruby client for Redis",
85
- "--output", "doc/#{tag}",
86
- "--no-cache",
87
- "--no-save",
88
- "-q",
89
- *files
90
- ]
91
-
92
- `yardoc #{Shellwords.shelljoin opts}`
93
- end
94
- ensure
95
- `git checkout -q #{current_branch}`
96
- end
97
- end
98
-
99
- task :prepare do
100
- versions = `git tag -l`.split("\n").grep(/^v/).sort
101
- latest_version = versions.last
102
-
103
- File.open("doc/.htaccess", "w") do |file|
104
- file.puts "RedirectMatch 302 ^/?$ /#{latest_version}"
105
- end
106
-
107
- File.open("doc/robots.txt", "w") do |file|
108
- file.puts "User-Agent: *"
109
-
110
- (versions - [latest_version]).each do |version|
111
- file.puts "Disallow: /#{version}"
112
- end
113
- end
114
-
115
- google_analytics = <<-EOS
116
- <script type="text/javascript">
117
-
118
- var _gaq = _gaq || [];
119
- _gaq.push(['_setAccount', 'UA-11356145-2']);
120
- _gaq.push(['_trackPageview']);
121
-
122
- (function() {
123
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
124
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
125
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
126
- })();
127
-
128
- </script>
129
- EOS
130
-
131
- Dir["doc/**/*.html"].each do |path|
132
- lines = IO.readlines(path)
133
-
134
- File.open(path, "w") do |file|
135
- lines.each do |line|
136
- if line.include?("</head>")
137
- file.write(google_analytics)
138
- end
139
-
140
- file.write(line)
141
- end
142
- end
143
- end
144
- end
145
-
146
- task :deploy do
147
- system "rsync --del -avz doc/ redis-rb.keyvalue.org:deploys/redis-rb.keyvalue.org/"
148
- end
149
- end
150
-
151
- class Source
152
-
153
- MATCHER = "(?:\\s{%d}#[^\\n]*\\n)*^\\s{%d}def ([a-z_?]+)(?:\(.*?\))?\\n.*?^\\s{%d}end\\n\\n"
154
-
155
- def initialize(data, options = {})
156
- @doc = parse(File.read(data), options)
157
- end
158
-
159
- def methods
160
- @doc.select do |d|
161
- d.is_a?(Method)
162
- end.map do |d|
163
- d.name
164
- end
165
- end
166
-
167
- def move(a, b)
168
- ao = @doc.find { |m| m.is_a?(Method) && m.name == a }
169
- bo = @doc.find { |m| m.is_a?(Method) && m.name == b }
170
- ai = @doc.index(ao)
171
- bi = @doc.index(bo)
172
-
173
- @doc.delete_at(ai)
174
- @doc.insert(bi, ao)
175
-
176
- nil
177
- end
178
-
179
- def to_s
180
- @doc.join
181
- end
182
-
183
- protected
184
-
185
- def parse(data, options = {})
186
- re = Regexp.new(MATCHER % ([options[:indent]] * 3), Regexp::MULTILINE)
187
- tail = data.dup
188
- doc = []
189
-
190
- while match = re.match(tail)
191
- doc << match.pre_match
192
- doc << Method.new(match)
193
- tail = match.post_match
194
- end
195
-
196
- doc << tail if tail
197
- doc
198
- end
199
-
200
- class Method
201
-
202
- def initialize(match)
203
- @match = match
204
- end
205
-
206
- def name
207
- @match[1]
208
- end
209
-
210
- def to_s
211
- @match[0]
212
- end
213
- end
214
- end
215
-
216
- namespace :commands do
217
- def redis_commands
218
- $redis_commands ||= doc.keys.map do |key|
219
- key.split(" ").first.downcase
220
- end.uniq
221
- end
222
-
223
- def doc
224
- $doc ||= begin
225
- require "open-uri"
226
- require "json"
227
-
228
- JSON.parse(open("https://github.com/antirez/redis-doc/raw/master/commands.json").read)
229
- end
230
- end
231
-
232
- task :order do
233
- require "json"
234
-
235
- reference = if File.exist?(".order")
236
- JSON.parse(File.read(".order"))
237
- else
238
- {}
239
- end
240
-
241
- buckets = {}
242
- doc.each do |k, v|
243
- buckets[v["group"]] ||= []
244
- buckets[v["group"]] << k.split.first.downcase
245
- buckets[v["group"]].uniq!
246
- end
247
-
248
- result = (reference.keys + (buckets.keys - reference.keys)).map do |g|
249
- [g, reference[g] + (buckets[g] - reference[g])]
250
- end
251
-
252
- File.open(".order", "w") do |f|
253
- f.write(JSON.pretty_generate(Hash[result]))
254
- end
255
- end
256
-
257
- def reorder(file, options = {})
258
- require "json"
259
- require "set"
260
-
261
- STDERR.puts "reordering #{file}..."
262
-
263
- reference = if File.exist?(".order")
264
- JSON.parse(File.read(".order"))
265
- else
266
- {}
267
- end
268
-
269
- dst = Source.new(file, options)
270
-
271
- src_methods = reference.map { |k, v| v }.flatten
272
- dst_methods = dst.methods
273
-
274
- src_set = Set.new(src_methods)
275
- dst_set = Set.new(dst_methods)
276
-
277
- intersection = src_set & dst_set
278
- intersection.delete("initialize")
279
-
280
- loop do
281
- src_methods = reference.map { |k, v| v }.flatten
282
- dst_methods = dst.methods
283
-
284
- src_methods = src_methods.select do |m|
285
- intersection.include?(m)
286
- end
287
-
288
- dst_methods = dst_methods.select do |m|
289
- intersection.include?(m)
290
- end
291
-
292
- if src_methods == dst_methods
293
- break
294
- end
295
-
296
- rv = yield(src_methods, dst_methods, dst)
297
- break if rv == false
298
- end
299
-
300
- File.open(file, "w") do |f|
301
- f.write(dst.to_s)
302
- end
303
- end
304
-
305
- task :reorder do
306
- blk = lambda do |src_methods, dst_methods, dst|
307
- src_methods.zip(dst_methods).each do |a, b|
308
- if a != b
309
- dst.move(a, b)
310
- break
311
- end
312
- end
313
- end
314
-
315
- reorder "lib/redis.rb", :indent => 2, &blk
316
- reorder "lib/redis/distributed.rb", :indent => 4, &blk
317
- end
318
-
319
- def missing(file, options = {})
320
- src = Source.new(file, options)
321
-
322
- defined_methods = src.methods.map(&:downcase)
323
- required_methods = redis_commands.map(&:downcase)
324
-
325
- STDOUT.puts "missing in #{file}:"
326
- STDOUT.puts (required_methods - defined_methods).inspect
327
- end
328
-
329
- task :missing do
330
- missing "lib/redis.rb", :indent => 2
331
- missing "lib/redis/distributed.rb", :indent => 4
332
- end
333
-
334
- def document(file)
335
- source = File.read(file)
336
-
337
- doc.each do |name, command|
338
- source.sub!(/(?:^ *# .*\n)*(^ *#\n(^ *# .+?\n)*)*^( *)def #{name.downcase}(\(|$)/) do
339
- extra_comments, indent, extra_args = $1, $3, $4
340
- comment = "#{indent}# #{command["summary"].strip}."
341
-
342
- IO.popen("par p#{2 + indent.size} 80", "r+") do |io|
343
- io.puts comment
344
- io.close_write
345
- comment = io.read
346
- end
347
-
348
- "#{comment}#{extra_comments}#{indent}def #{name.downcase}#{extra_args}"
349
- end
350
- end
351
-
352
- File.open(file, "w") { |f| f.write(source) }
353
- end
354
-
355
- task :doc do
356
- document "lib/redis.rb"
357
- document "lib/redis/distributed.rb"
358
- end
359
-
360
- task :verify do
361
- require "redis"
362
- require "stringio"
363
-
364
- require "./test/helper"
365
-
366
- OPTIONS[:logger] = Logger.new("./tmp/log")
367
-
368
- Rake::Task["test:ruby"].invoke
369
-
370
- redis = Redis.new
371
-
372
- report = ["Command", "\033[0mDefined?\033[0m", "\033[0mTested?\033[0m"]
373
-
374
- yes, no = "\033[1;32mYes\033[0m", "\033[1;31mNo\033[0m"
375
-
376
- log = File.read("./tmp/log")
377
-
378
- redis_commands.sort.each do |name, _|
379
- defined, tested = redis.respond_to?(name), log[">> #{name.upcase}"]
380
-
381
- next if defined && tested
382
-
383
- report << name
384
- report << (defined ? yes : no)
385
- report << (tested ? yes : no)
386
- end
387
-
388
- IO.popen("rs 0 3", "w") do |io|
389
- io.puts report.join("\n")
390
- end
391
- end
392
- end
@@ -1,62 +0,0 @@
1
- # Run with
2
- #
3
- # $ ruby -Ilib benchmarking/logging.rb
4
- #
5
-
6
- begin
7
- require "bench"
8
- rescue LoadError
9
- $stderr.puts "`gem install bench` and try again."
10
- exit 1
11
- end
12
-
13
- require "redis"
14
- require "logger"
15
-
16
- def log(level, namespace = nil)
17
- logger = (namespace || Kernel).const_get(:Logger).new("/dev/null")
18
- logger.level = (namespace || Logger).const_get(level)
19
- logger
20
- end
21
-
22
- def stress(redis)
23
- redis.flushdb
24
-
25
- n = (ARGV.shift || 2000).to_i
26
-
27
- n.times do |i|
28
- key = "foo:#{i}"
29
- redis.set key, i
30
- redis.get key
31
- end
32
- end
33
-
34
- default = Redis.new
35
-
36
- logging_redises = [
37
- Redis.new(:logger => log(:DEBUG)),
38
- Redis.new(:logger => log(:INFO)),
39
- ]
40
-
41
- begin
42
- require "log4r"
43
-
44
- logging_redises += [
45
- Redis.new(:logger => log(:DEBUG, Log4r)),
46
- Redis.new(:logger => log(:INFO, Log4r)),
47
- ]
48
- rescue LoadError
49
- $stderr.puts "Log4r not installed. `gem install log4r` if you want to compare it against Ruby's Logger (spoiler: it's much faster)."
50
- end
51
-
52
- benchmark "Default options (no logger)" do
53
- stress(default)
54
- end
55
-
56
- logging_redises.each do |redis|
57
- benchmark "#{redis.client.logger.class} on #{Logger::SEV_LABEL[redis.client.logger.level]}" do
58
- stress(redis)
59
- end
60
- end
61
-
62
- run 10
@@ -1,51 +0,0 @@
1
- require "benchmark"
2
-
3
- $:.push File.join(File.dirname(__FILE__), 'lib')
4
-
5
- require 'redis'
6
-
7
- ITERATIONS = 10000
8
-
9
- @r = Redis.new
10
-
11
- Benchmark.bmbm do |benchmark|
12
- benchmark.report("set") do
13
- @r.flushdb
14
-
15
- ITERATIONS.times do |i|
16
- @r.set("foo#{i}", "Hello world!")
17
- @r.get("foo#{i}")
18
- end
19
- end
20
-
21
- benchmark.report("set (pipelined)") do
22
- @r.flushdb
23
-
24
- @r.pipelined do
25
- ITERATIONS.times do |i|
26
- @r.set("foo#{i}", "Hello world!")
27
- @r.get("foo#{i}")
28
- end
29
- end
30
- end
31
-
32
- benchmark.report("lpush+ltrim") do
33
- @r.flushdb
34
-
35
- ITERATIONS.times do |i|
36
- @r.lpush "lpush#{i}", i
37
- @r.ltrim "ltrim#{i}", 0, 30
38
- end
39
- end
40
-
41
- benchmark.report("lpush+ltrim (pipelined)") do
42
- @r.flushdb
43
-
44
- @r.pipelined do
45
- ITERATIONS.times do |i|
46
- @r.lpush "lpush#{i}", i
47
- @r.ltrim "ltrim#{i}", 0, 30
48
- end
49
- end
50
- end
51
- end
@@ -1,21 +0,0 @@
1
- # Run with
2
- #
3
- # $ ruby -Ilib benchmarking/speed.rb
4
- #
5
-
6
- require "benchmark"
7
- require "redis"
8
-
9
- r = Redis.new
10
- n = (ARGV.shift || 20000).to_i
11
-
12
- elapsed = Benchmark.realtime do
13
- # n sets, n gets
14
- n.times do |i|
15
- key = "foo#{i}"
16
- r[key] = key * 10
17
- r[key]
18
- end
19
- end
20
-
21
- puts '%.2f Kops' % (2 * n / 1000 / elapsed)
@@ -1,24 +0,0 @@
1
- require 'fileutils'
2
-
3
- def run_in_background(command)
4
- fork { system command }
5
- end
6
-
7
- def with_all_segments(&block)
8
- 0.upto(9) do |segment_number|
9
- block_size = 100000
10
- start_index = segment_number * block_size
11
- end_index = start_index + block_size - 1
12
- block.call(start_index, end_index)
13
- end
14
- end
15
-
16
- #with_all_segments do |start_index, end_index|
17
- # puts "Initializing keys from #{start_index} to #{end_index}"
18
- # system "ruby worker.rb initialize #{start_index} #{end_index} 0"
19
- #end
20
-
21
- with_all_segments do |start_index, end_index|
22
- run_in_background "ruby worker.rb write #{start_index} #{end_index} 10"
23
- run_in_background "ruby worker.rb read #{start_index} #{end_index} 1"
24
- end
@@ -1,71 +0,0 @@
1
- BENCHMARK_ROOT = File.dirname(__FILE__)
2
- REDIS_ROOT = File.join(BENCHMARK_ROOT, "..", "lib")
3
-
4
- $: << REDIS_ROOT
5
- require 'redis'
6
- require 'benchmark'
7
-
8
- def show_usage
9
- puts <<-EOL
10
- Usage: worker.rb [read:write] <start_index> <end_index> <sleep_msec>
11
- EOL
12
- end
13
-
14
- def shift_from_argv
15
- value = ARGV.shift
16
- unless value
17
- show_usage
18
- exit -1
19
- end
20
- value
21
- end
22
-
23
- operation = shift_from_argv.to_sym
24
- start_index = shift_from_argv.to_i
25
- end_index = shift_from_argv.to_i
26
- sleep_msec = shift_from_argv.to_i
27
- sleep_duration = sleep_msec/1000.0
28
-
29
- redis = Redis.new
30
-
31
- case operation
32
- when :initialize
33
-
34
- start_index.upto(end_index) do |i|
35
- redis[i] = 0
36
- end
37
-
38
- when :clear
39
-
40
- start_index.upto(end_index) do |i|
41
- redis.delete(i)
42
- end
43
-
44
- when :read, :write
45
-
46
- puts "Starting to #{operation} at segment #{end_index + 1}"
47
-
48
- loop do
49
- t1 = Time.now
50
- start_index.upto(end_index) do |i|
51
- case operation
52
- when :read
53
- redis.get(i)
54
- when :write
55
- redis.incr(i)
56
- else
57
- raise "Unknown operation: #{operation}"
58
- end
59
- sleep sleep_duration
60
- end
61
- t2 = Time.now
62
-
63
- requests_processed = end_index - start_index
64
- time = t2 - t1
65
- puts "#{t2.strftime("%H:%M")} [segment #{end_index + 1}] : Processed #{requests_processed} requests in #{time} seconds - #{(requests_processed/time).round} requests/sec"
66
- end
67
-
68
- else
69
- raise "Unknown operation: #{operation}"
70
- end
71
-
data/examples/basic.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'redis'
2
-
3
- r = Redis.new
4
-
5
- r.del('foo')
6
-
7
- puts
8
-
9
- p'set foo to "bar"'
10
- r['foo'] = 'bar'
11
-
12
- puts
13
-
14
- p 'value of foo'
15
- p r['foo']
@@ -1,43 +0,0 @@
1
- require "redis"
2
- require "redis/distributed"
3
-
4
- r = Redis::Distributed.new %w[redis://localhost:6379 redis://localhost:6380 redis://localhost:6381 redis://localhost:6382]
5
-
6
- r.flushdb
7
-
8
- r['urmom'] = 'urmom'
9
- r['urdad'] = 'urdad'
10
- r['urmom1'] = 'urmom1'
11
- r['urdad1'] = 'urdad1'
12
- r['urmom2'] = 'urmom2'
13
- r['urdad2'] = 'urdad2'
14
- r['urmom3'] = 'urmom3'
15
- r['urdad3'] = 'urdad3'
16
- p r['urmom']
17
- p r['urdad']
18
- p r['urmom1']
19
- p r['urdad1']
20
- p r['urmom2']
21
- p r['urdad2']
22
- p r['urmom3']
23
- p r['urdad3']
24
-
25
- r.rpush 'listor', 'foo1'
26
- r.rpush 'listor', 'foo2'
27
- r.rpush 'listor', 'foo3'
28
- r.rpush 'listor', 'foo4'
29
- r.rpush 'listor', 'foo5'
30
-
31
- p r.rpop('listor')
32
- p r.rpop('listor')
33
- p r.rpop('listor')
34
- p r.rpop('listor')
35
- p r.rpop('listor')
36
-
37
- puts "key distribution:"
38
-
39
- r.ring.nodes.each do |node|
40
- p [node.client, node.keys("*")]
41
- end
42
- r.flushdb
43
- p r.keys('*')
@@ -1,17 +0,0 @@
1
- require 'redis'
2
-
3
- r = Redis.new
4
-
5
- puts
6
- p 'incr'
7
- r.del 'counter'
8
-
9
- p r.incr('counter')
10
- p r.incr('counter')
11
- p r.incr('counter')
12
-
13
- puts
14
- p 'decr'
15
- p r.decr('counter')
16
- p r.decr('counter')
17
- p r.decr('counter')