redis 4.0.0.rc1 → 4.5.1

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 (101) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +164 -3
  3. data/README.md +127 -18
  4. data/lib/redis/client.rb +164 -93
  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 +5 -2
  16. data/lib/redis/connection/hiredis.rb +4 -3
  17. data/lib/redis/connection/registry.rb +2 -1
  18. data/lib/redis/connection/ruby.rb +125 -106
  19. data/lib/redis/connection/synchrony.rb +18 -5
  20. data/lib/redis/connection.rb +2 -0
  21. data/lib/redis/distributed.rb +995 -0
  22. data/lib/redis/errors.rb +48 -0
  23. data/lib/redis/hash_ring.rb +89 -0
  24. data/lib/redis/pipeline.rb +55 -9
  25. data/lib/redis/subscribe.rb +11 -12
  26. data/lib/redis/version.rb +3 -1
  27. data/lib/redis.rb +1433 -381
  28. metadata +34 -141
  29. data/.gitignore +0 -16
  30. data/.travis/Gemfile +0 -11
  31. data/.travis.yml +0 -71
  32. data/.yardopts +0 -3
  33. data/Gemfile +0 -3
  34. data/benchmarking/logging.rb +0 -71
  35. data/benchmarking/pipeline.rb +0 -51
  36. data/benchmarking/speed.rb +0 -21
  37. data/benchmarking/suite.rb +0 -24
  38. data/benchmarking/worker.rb +0 -71
  39. data/examples/basic.rb +0 -15
  40. data/examples/consistency.rb +0 -114
  41. data/examples/incr-decr.rb +0 -17
  42. data/examples/list.rb +0 -26
  43. data/examples/pubsub.rb +0 -37
  44. data/examples/sentinel/sentinel.conf +0 -9
  45. data/examples/sentinel/start +0 -49
  46. data/examples/sentinel.rb +0 -41
  47. data/examples/sets.rb +0 -36
  48. data/examples/unicorn/config.ru +0 -3
  49. data/examples/unicorn/unicorn.rb +0 -20
  50. data/makefile +0 -42
  51. data/redis.gemspec +0 -40
  52. data/test/bitpos_test.rb +0 -63
  53. data/test/blocking_commands_test.rb +0 -183
  54. data/test/client_test.rb +0 -59
  55. data/test/command_map_test.rb +0 -28
  56. data/test/commands_on_hashes_test.rb +0 -174
  57. data/test/commands_on_hyper_log_log_test.rb +0 -70
  58. data/test/commands_on_lists_test.rb +0 -154
  59. data/test/commands_on_sets_test.rb +0 -208
  60. data/test/commands_on_sorted_sets_test.rb +0 -444
  61. data/test/commands_on_strings_test.rb +0 -338
  62. data/test/commands_on_value_types_test.rb +0 -246
  63. data/test/connection_handling_test.rb +0 -275
  64. data/test/db/.gitkeep +0 -0
  65. data/test/encoding_test.rb +0 -14
  66. data/test/error_replies_test.rb +0 -57
  67. data/test/fork_safety_test.rb +0 -60
  68. data/test/helper.rb +0 -179
  69. data/test/helper_test.rb +0 -22
  70. data/test/internals_test.rb +0 -435
  71. data/test/persistence_control_commands_test.rb +0 -24
  72. data/test/pipelining_commands_test.rb +0 -238
  73. data/test/publish_subscribe_test.rb +0 -280
  74. data/test/remote_server_control_commands_test.rb +0 -175
  75. data/test/scanning_test.rb +0 -407
  76. data/test/scripting_test.rb +0 -76
  77. data/test/sentinel_command_test.rb +0 -78
  78. data/test/sentinel_test.rb +0 -253
  79. data/test/sorting_test.rb +0 -57
  80. data/test/ssl_test.rb +0 -69
  81. data/test/support/connection/hiredis.rb +0 -1
  82. data/test/support/connection/ruby.rb +0 -1
  83. data/test/support/connection/synchrony.rb +0 -17
  84. data/test/support/redis_mock.rb +0 -130
  85. data/test/support/ssl/gen_certs.sh +0 -31
  86. data/test/support/ssl/trusted-ca.crt +0 -25
  87. data/test/support/ssl/trusted-ca.key +0 -27
  88. data/test/support/ssl/trusted-cert.crt +0 -81
  89. data/test/support/ssl/trusted-cert.key +0 -28
  90. data/test/support/ssl/untrusted-ca.crt +0 -26
  91. data/test/support/ssl/untrusted-ca.key +0 -27
  92. data/test/support/ssl/untrusted-cert.crt +0 -82
  93. data/test/support/ssl/untrusted-cert.key +0 -28
  94. data/test/support/wire/synchrony.rb +0 -24
  95. data/test/support/wire/thread.rb +0 -5
  96. data/test/synchrony_driver.rb +0 -85
  97. data/test/test.conf.erb +0 -9
  98. data/test/thread_safety_test.rb +0 -60
  99. data/test/transactions_test.rb +0 -262
  100. data/test/unknown_commands_test.rb +0 -12
  101. data/test/url_param_test.rb +0 -136
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.rc1
4
+ version: 4.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -13,25 +13,25 @@ authors:
13
13
  - Michel Martens
14
14
  - Damian Janowski
15
15
  - Pieter Noordhuis
16
- autorequire:
16
+ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2016-11-24 00:00:00.000000000 Z
19
+ date: 2021-10-15 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: test-unit
22
+ name: em-synchrony
23
23
  requirement: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 3.1.5
27
+ version: '0'
28
28
  type: :development
29
29
  prerelease: false
30
30
  version_requirements: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 3.1.5
34
+ version: '0'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: hiredis
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -47,7 +47,7 @@ dependencies:
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  - !ruby/object:Gem::Dependency
50
- name: em-synchrony
50
+ name: mocha
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
@@ -69,99 +69,43 @@ executables: []
69
69
  extensions: []
70
70
  extra_rdoc_files: []
71
71
  files:
72
- - ".gitignore"
73
- - ".travis.yml"
74
- - ".travis/Gemfile"
75
- - ".yardopts"
76
72
  - CHANGELOG.md
77
- - Gemfile
78
73
  - LICENSE
79
74
  - README.md
80
- - benchmarking/logging.rb
81
- - benchmarking/pipeline.rb
82
- - benchmarking/speed.rb
83
- - benchmarking/suite.rb
84
- - benchmarking/worker.rb
85
- - examples/basic.rb
86
- - examples/consistency.rb
87
- - examples/incr-decr.rb
88
- - examples/list.rb
89
- - examples/pubsub.rb
90
- - examples/sentinel.rb
91
- - examples/sentinel/sentinel.conf
92
- - examples/sentinel/start
93
- - examples/sets.rb
94
- - examples/unicorn/config.ru
95
- - examples/unicorn/unicorn.rb
96
75
  - lib/redis.rb
97
76
  - lib/redis/client.rb
77
+ - lib/redis/cluster.rb
78
+ - lib/redis/cluster/command.rb
79
+ - lib/redis/cluster/command_loader.rb
80
+ - lib/redis/cluster/key_slot_converter.rb
81
+ - lib/redis/cluster/node.rb
82
+ - lib/redis/cluster/node_key.rb
83
+ - lib/redis/cluster/node_loader.rb
84
+ - lib/redis/cluster/option.rb
85
+ - lib/redis/cluster/slot.rb
86
+ - lib/redis/cluster/slot_loader.rb
98
87
  - lib/redis/connection.rb
99
88
  - lib/redis/connection/command_helper.rb
100
89
  - lib/redis/connection/hiredis.rb
101
90
  - lib/redis/connection/registry.rb
102
91
  - lib/redis/connection/ruby.rb
103
92
  - lib/redis/connection/synchrony.rb
93
+ - lib/redis/distributed.rb
104
94
  - lib/redis/errors.rb
95
+ - lib/redis/hash_ring.rb
105
96
  - lib/redis/pipeline.rb
106
97
  - lib/redis/subscribe.rb
107
98
  - lib/redis/version.rb
108
- - makefile
109
- - redis.gemspec
110
- - test/bitpos_test.rb
111
- - test/blocking_commands_test.rb
112
- - test/client_test.rb
113
- - test/command_map_test.rb
114
- - test/commands_on_hashes_test.rb
115
- - test/commands_on_hyper_log_log_test.rb
116
- - test/commands_on_lists_test.rb
117
- - test/commands_on_sets_test.rb
118
- - test/commands_on_sorted_sets_test.rb
119
- - test/commands_on_strings_test.rb
120
- - test/commands_on_value_types_test.rb
121
- - test/connection_handling_test.rb
122
- - test/db/.gitkeep
123
- - test/encoding_test.rb
124
- - test/error_replies_test.rb
125
- - test/fork_safety_test.rb
126
- - test/helper.rb
127
- - test/helper_test.rb
128
- - test/internals_test.rb
129
- - test/persistence_control_commands_test.rb
130
- - test/pipelining_commands_test.rb
131
- - test/publish_subscribe_test.rb
132
- - test/remote_server_control_commands_test.rb
133
- - test/scanning_test.rb
134
- - test/scripting_test.rb
135
- - test/sentinel_command_test.rb
136
- - test/sentinel_test.rb
137
- - test/sorting_test.rb
138
- - test/ssl_test.rb
139
- - test/support/connection/hiredis.rb
140
- - test/support/connection/ruby.rb
141
- - test/support/connection/synchrony.rb
142
- - test/support/redis_mock.rb
143
- - test/support/ssl/gen_certs.sh
144
- - test/support/ssl/trusted-ca.crt
145
- - test/support/ssl/trusted-ca.key
146
- - test/support/ssl/trusted-cert.crt
147
- - test/support/ssl/trusted-cert.key
148
- - test/support/ssl/untrusted-ca.crt
149
- - test/support/ssl/untrusted-ca.key
150
- - test/support/ssl/untrusted-cert.crt
151
- - test/support/ssl/untrusted-cert.key
152
- - test/support/wire/synchrony.rb
153
- - test/support/wire/thread.rb
154
- - test/synchrony_driver.rb
155
- - test/test.conf.erb
156
- - test/thread_safety_test.rb
157
- - test/transactions_test.rb
158
- - test/unknown_commands_test.rb
159
- - test/url_param_test.rb
160
99
  homepage: https://github.com/redis/redis-rb
161
100
  licenses:
162
101
  - MIT
163
- metadata: {}
164
- post_install_message:
102
+ metadata:
103
+ bug_tracker_uri: https://github.com/redis/redis-rb/issues
104
+ changelog_uri: https://github.com/redis/redis-rb/blob/master/CHANGELOG.md
105
+ documentation_uri: https://www.rubydoc.info/gems/redis/4.5.1
106
+ homepage_uri: https://github.com/redis/redis-rb
107
+ source_code_uri: https://github.com/redis/redis-rb/tree/v4.5.1
108
+ post_install_message:
165
109
  rdoc_options: []
166
110
  require_paths:
167
111
  - lib
@@ -169,66 +113,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
113
  requirements:
170
114
  - - ">="
171
115
  - !ruby/object:Gem::Version
172
- version: '0'
116
+ version: 2.4.0
173
117
  required_rubygems_version: !ruby/object:Gem::Requirement
174
118
  requirements:
175
- - - ">"
119
+ - - ">="
176
120
  - !ruby/object:Gem::Version
177
- version: 1.3.1
121
+ version: '0'
178
122
  requirements: []
179
- rubyforge_project:
180
- rubygems_version: 2.4.5.1
181
- signing_key:
123
+ rubygems_version: 3.1.2
124
+ signing_key:
182
125
  specification_version: 4
183
126
  summary: A Ruby client library for Redis
184
- test_files:
185
- - test/bitpos_test.rb
186
- - test/blocking_commands_test.rb
187
- - test/client_test.rb
188
- - test/command_map_test.rb
189
- - test/commands_on_hashes_test.rb
190
- - test/commands_on_hyper_log_log_test.rb
191
- - test/commands_on_lists_test.rb
192
- - test/commands_on_sets_test.rb
193
- - test/commands_on_sorted_sets_test.rb
194
- - test/commands_on_strings_test.rb
195
- - test/commands_on_value_types_test.rb
196
- - test/connection_handling_test.rb
197
- - test/db/.gitkeep
198
- - test/encoding_test.rb
199
- - test/error_replies_test.rb
200
- - test/fork_safety_test.rb
201
- - test/helper.rb
202
- - test/helper_test.rb
203
- - test/internals_test.rb
204
- - test/persistence_control_commands_test.rb
205
- - test/pipelining_commands_test.rb
206
- - test/publish_subscribe_test.rb
207
- - test/remote_server_control_commands_test.rb
208
- - test/scanning_test.rb
209
- - test/scripting_test.rb
210
- - test/sentinel_command_test.rb
211
- - test/sentinel_test.rb
212
- - test/sorting_test.rb
213
- - test/ssl_test.rb
214
- - test/support/connection/hiredis.rb
215
- - test/support/connection/ruby.rb
216
- - test/support/connection/synchrony.rb
217
- - test/support/redis_mock.rb
218
- - test/support/ssl/gen_certs.sh
219
- - test/support/ssl/trusted-ca.crt
220
- - test/support/ssl/trusted-ca.key
221
- - test/support/ssl/trusted-cert.crt
222
- - test/support/ssl/trusted-cert.key
223
- - test/support/ssl/untrusted-ca.crt
224
- - test/support/ssl/untrusted-ca.key
225
- - test/support/ssl/untrusted-cert.crt
226
- - test/support/ssl/untrusted-cert.key
227
- - test/support/wire/synchrony.rb
228
- - test/support/wire/thread.rb
229
- - test/synchrony_driver.rb
230
- - test/test.conf.erb
231
- - test/thread_safety_test.rb
232
- - test/transactions_test.rb
233
- - test/unknown_commands_test.rb
234
- - test/url_param_test.rb
127
+ test_files: []
data/.gitignore DELETED
@@ -1,16 +0,0 @@
1
- *.rdb
2
- *.swp
3
- Gemfile.lock
4
- *.gem
5
- /tmp/
6
- /.idea
7
- /.yardoc
8
- /coverage/*
9
- /doc/
10
- /examples/sentinel/sentinel.conf
11
- /nohup.out
12
- /pkg/*
13
- /rdsrv
14
- /redis/*
15
- /test/db
16
- /test/test.conf
data/.travis/Gemfile DELETED
@@ -1,11 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec :path => "../"
4
-
5
- case ENV["conn"]
6
- when "hiredis"
7
- gem "hiredis"
8
- when "synchrony"
9
- gem "hiredis"
10
- gem "em-synchrony"
11
- end
data/.travis.yml DELETED
@@ -1,71 +0,0 @@
1
- language: ruby
2
-
3
- script: make test
4
-
5
- before_install:
6
- - rvm get stable
7
-
8
- rvm:
9
- - 2.1
10
- - 2.2
11
- - 2.3
12
- - jruby-9
13
- - rbx-3
14
-
15
- gemfile: ".travis/Gemfile"
16
-
17
- sudo: false
18
-
19
- env:
20
- global:
21
- - VERBOSE=true
22
- - TIMEOUT=1
23
- matrix:
24
- - DRIVER=ruby REDIS_BRANCH=3.0
25
- - DRIVER=ruby REDIS_BRANCH=3.2
26
- - DRIVER=hiredis REDIS_BRANCH=3.0
27
- - DRIVER=hiredis REDIS_BRANCH=3.2
28
- - DRIVER=synchrony REDIS_BRANCH=3.0
29
- - DRIVER=synchrony REDIS_BRANCH=3.2
30
- - DRIVER=ruby REDIS_BRANCH=unstable
31
-
32
- branches:
33
- only:
34
- - master
35
-
36
- matrix:
37
- exclude:
38
- # hiredis
39
- - rvm: jruby-9
40
- gemfile: .travis/Gemfile
41
- env: DRIVER=hiredis REDIS_BRANCH=3.0
42
- - rvm: jruby-9
43
- gemfile: .travis/Gemfile
44
- env: DRIVER=hiredis REDIS_BRANCH=3.2
45
- - rvm: jruby-9
46
- gemfile: .travis/Gemfile
47
- env: DRIVER=hiredis REDIS_BRANCH=3.0
48
- - rvm: jruby-9
49
- gemfile: .travis/Gemfile
50
- env: DRIVER=hiredis REDIS_BRANCH=3.2
51
-
52
- # synchrony
53
- - rvm: jruby-9
54
- gemfile: .travis/Gemfile
55
- env: DRIVER=synchrony REDIS_BRANCH=3.0
56
- - rvm: jruby-9
57
- gemfile: .travis/Gemfile
58
- env: DRIVER=synchrony REDIS_BRANCH=3.2
59
- - rvm: jruby-9
60
- gemfile: .travis/Gemfile
61
- env: DRIVER=synchrony REDIS_BRANCH=3.0
62
- - rvm: jruby-9
63
- gemfile: .travis/Gemfile
64
- env: DRIVER=synchrony REDIS_BRANCH=3.2
65
- allow_failures:
66
- - rvm: rbx-3
67
-
68
- notifications:
69
- irc:
70
- - irc.freenode.net#redis-rb
71
- email: false
data/.yardopts DELETED
@@ -1,3 +0,0 @@
1
- --exclude redis/connection
2
- --exclude redis/compat
3
- --markup markdown
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
@@ -1,71 +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
- logger = redis._client.logger
58
-
59
- case logger
60
- when Logger
61
- level = Logger::SEV_LABEL[logger.level]
62
- when Log4r::Logger
63
- level = logger.levels[logger.level]
64
- end
65
-
66
- benchmark "#{logger.class} on #{level}" do
67
- stress(redis)
68
- end
69
- end
70
-
71
- 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']