redis 4.0.0.rc1 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +143 -3
  3. data/README.md +127 -18
  4. data/lib/redis/client.rb +150 -93
  5. data/lib/redis/cluster/command.rb +81 -0
  6. data/lib/redis/cluster/command_loader.rb +34 -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 +3 -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 +123 -105
  19. data/lib/redis/connection/synchrony.rb +18 -5
  20. data/lib/redis/connection.rb +2 -0
  21. data/lib/redis/distributed.rb +955 -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 +1242 -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.4.0
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-07-28 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.4.0
106
+ homepage_uri: https://github.com/redis/redis-rb
107
+ source_code_uri: https://github.com/redis/redis-rb/tree/v4.4.0
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.3.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']