ruby-redis 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,11 +1,11 @@
1
1
  This project was started because I needed an authenticating and routable
2
- proxy for Redis. The main feature is a high-performance, evented, pure-Ruby,
3
- implementation of the complete Redis wire protocol with the same interface as
2
+ proxy for Redis. The main feature is a high performance, eventable, pure Ruby,
3
+ implementation of the complete Redis wire protocol using the same interface as
4
4
  hiredis/reader.
5
5
 
6
6
  In the worst possible scenario of very small payloads, I was benching 30k GETs
7
7
  per second with pure ruby and 40k/s with hiredis/reader. With larger payloads,
8
- the performance gap narrows to zero. Not near-zero, actual zero.
8
+ the performance gap narrows to zero.
9
9
 
10
10
  Ruby Gem:
11
11
 
@@ -24,9 +24,9 @@ Client example:
24
24
 
25
25
  require 'redis'
26
26
  EventMachine.run {
27
- redis = EventMachine.connect '127.0.0.1', 6379, Redis
27
+ redis = EventMachine.connect '127.0.0.1', 6379, Redis::Client
28
28
  # Subscribe and publish messages will call here
29
- redis.pubsub_callback do |message|
29
+ redis.on_pubsub do |message|
30
30
  # case message[0]
31
31
  # when 'psubscribe' ...
32
32
  end
@@ -57,23 +57,24 @@ Fibers; compatible with em-synchrony:
57
57
 
58
58
  require 'redis/synchrony'
59
59
  Redis.synchrony {
60
- # Use redis to pipeline and sync to block
61
- redis = EventMachine.connect '127.0.0.1', 6379, Redis, :hiredis => true
60
+ # Be sure to pipeline commands when you can
61
+ redis = EventMachine.connect '127.0.0.1', 6379, Redis::Client
62
+ # synchronized requests will return result or raise exception
62
63
  sync = redis.synchrony
63
64
  # repeat transaction until success
64
- reply = nil
65
+ reply = check = nil
65
66
  until reply
66
- redis.watch 'mykey' # never fails, use pipeline
67
+ redis.watch 'mykey'
67
68
  x = sync.get('mykey').to_i
68
- reply = sync.multi_exec do |multi|
69
- # multi is pipelined (async)
70
- # no reason to block in here
71
- multi.set 'mykey', x + 1
72
- end
69
+ redis.multi
70
+ redis.set 'mykey', x + 1
71
+ redis.badcmd
72
+ redis.get('mykey') {|result| check=result}
73
+ reply = sync.exec
73
74
  end
74
75
  redis.close
75
- p reply
76
76
  EM.stop
77
+ p reply, check # ["OK", #<RuntimeError>, "4"], "4"
77
78
  }
78
79
 
79
80
 
data/lib/redis.rb CHANGED
@@ -1,215 +1,13 @@
1
- # for Ruby older than 1.9
2
- unless Kernel.respond_to?(:require_relative)
3
- module Kernel
4
- def require_relative(path)
5
- require File.join(File.dirname(caller[0]), path.to_str)
6
- end
7
- end
1
+ %w{redis/version redis/client}.each do |file|
2
+ require File.expand_path file, File.dirname(__FILE__)
8
3
  end
9
4
 
10
- require 'eventmachine'
11
- class Redis < EventMachine::Connection ; end
12
-
13
- require_relative 'redis/version'
14
- require_relative 'redis/reader'
15
- require_relative 'redis/sender'
16
-
17
- class Redis
18
-
19
- include Sender
20
-
21
- class Command
22
- include EventMachine::Deferrable
23
- def initialize connection
24
- @connection = connection
25
- self.errback do |msg|
26
- # game over on timeout
27
- @connection.close_connection unless msg
28
- end
29
- end
30
- # EventMachine older than 1.0.0.beta.4 doesn't return self
31
- test = self.new nil
32
- unless self === test.callback{}
33
- def callback; super; self; end
34
- def errback; super; self; end
35
- def timeout *args; super; self; end
36
- end
37
- end
38
-
39
- def initialize options={}
40
- if defined? Hiredis and defined? Hiredis::Reader
41
- @reader = Hiredis::Reader.new
42
- else
43
- @reader = Reader.new
44
- end
45
- @queue = []
46
- @pubsub_callback = proc{}
47
- end
48
-
49
- def unbind
50
- @queue.each { |d| d.fail RuntimeError.new 'connection closed' }
51
- @queue.clear
52
- end
53
-
54
- # Pub/Sub works by sending all orphaned messages to this callback.
55
- # It is simple and fast but not tolerant to programming errors.
56
- # Subclass Redis and/or create a defensive layer if you need to.
57
- def pubsub_callback &block
58
- @pubsub_callback = block
59
- end
60
-
61
- def receive_data data
62
- @reader.feed data
63
- until (data = @reader.gets) == false
64
- deferrable = @queue.shift
65
- if deferrable
66
- if Exception === data
67
- deferrable.fail data
68
- else
69
- deferrable.succeed data
70
- end
71
- else
72
- @pubsub_callback.call data
73
- end
74
- end
75
- rescue Exception => e
76
- @queue.shift.fail e unless @queue.empty?
77
- close_connection
78
- end
79
-
80
- def method_missing method, *args, &block
81
- deferrable = Command.new self
82
- if [:subscribe, :psubscribe, :unsubscribe, :punsubscribe].include? method
83
- deferrable.callback do |data|
84
- deferrable.succeed nil
85
- @pubsub_callback.call data
86
- end
87
- end
88
- if transform = self.class.transforms[method]
89
- deferrable.callback do |data|
90
- begin
91
- deferrable.succeed transform.call data
92
- rescue Exception => e
93
- deferrable.fail e
94
- end
95
- end
96
- end
97
- deferrable.callback &block if block
98
- @queue.push deferrable
99
- send_redis args.reduce([method]){ |arr, arg|
100
- if Hash === arg
101
- arr += arg.to_a.flatten 1
102
- else
103
- arr << arg
104
- end
105
- }
106
- deferrable
107
- end
108
-
109
- # Yielded by multi_exec to proxy and collect commands
110
- class Multi < Command
111
- include Enumerable
112
- def initialize *args
113
- super
114
- @commands = []
115
- end
116
- def each
117
- @commands.each {|x|yield x}
118
- end
119
- def size
120
- @commands.size
121
- end
122
- def method_missing method, *args, &block
123
- command = @connection.send method, *args, &block
124
- proxy = Command.new @connection
125
- command.callback do |status|
126
- @commands << proxy
127
- end
128
- command.errback do |err|
129
- @commands << err
130
- proxy.fail err
131
- end
132
- proxy
133
- end
134
- end
135
-
136
- # Wrap around multi and exec. Leaves the raw calls
137
- # to multi and exec open for custom implementations.
138
- def multi_exec
139
- self.multi.errback do |r|
140
- # This usually happens in the case of a programming error.
141
- # Sometimes it is called when the connection breaks.
142
- self.close_connection
143
- end
144
- error = nil
145
- begin
146
- yield redis_multi = Multi.new(self)
147
- rescue Exception => e
148
- error = e
149
- end
150
- redis_exec = self.exec
151
- if error
152
- EM.next_tick { redis_exec.fail error }
153
- end
154
- redis_exec.callback do |results|
155
- # Normalized results include syntax errors and original references.
156
- # Command callbacks are meant to run before exec callbacks.
157
- if results == nil
158
- redis_exec.succeed nil
159
- else
160
- normalized_results = []
161
- redis_multi.each do |command|
162
- if Exception === command
163
- normalized_results << command
164
- else
165
- result = results.shift
166
- normalized_results << result
167
- if Exception === result
168
- command.fail result
169
- else
170
- command.succeed result
171
- end
172
- end
173
- end
174
- redis_exec.succeed normalized_results
175
- end
176
- end
177
- end
5
+ module Redis
178
6
 
179
- # Some data is best transformed into a Ruby type. You can set up global
180
- # transforms here that are automatically attached to command callbacks.
181
- # Redis.transforms[:mycustom1] = Redis.transforms[:exists] # boolean
182
- # Redis.transforms[:mycustom2] = proc { |data| MyType.new data }
183
- def self.transforms
184
- @@transforms ||= lambda {
185
- boolean = lambda { |tf| tf[0] == 1 ? true : false }
186
- hash = lambda { |hash| Hash[*hash] }
187
- {
188
- #keys
189
- :exists => boolean,
190
- :expire => boolean,
191
- :expireat => boolean,
192
- :move => boolean,
193
- :persist => boolean,
194
- :renamenx => boolean,
195
- #strings
196
- :msetnx => boolean,
197
- :setnx => boolean,
198
- #hashes
199
- :hexists => boolean,
200
- :hgetall => hash,
201
- :hset => boolean,
202
- :hsetnx => boolean,
203
- #sets
204
- :sismember => boolean,
205
- :smove => boolean,
206
- :srem => boolean,
207
- #zsets
208
- :zrem => boolean,
209
- }
210
- }.call
211
- end
7
+ # This space intentionally blank
212
8
 
9
+ # Server entry in redis/bin.rb
10
+ # Client entry in redis/client.rb
213
11
 
214
12
  end
215
13
 
data/lib/redis/bin.rb CHANGED
@@ -1,13 +1,45 @@
1
- require File.expand_path '../redis', File.dirname(__FILE__)
2
- require_relative 'config'
3
- require_relative 'connection'
4
- require_relative 'logger'
1
+ %w{reader sender version config logger strict connection protocol database
2
+ server keys strings lists sets zsets hashes pubsub}.each do |file|
3
+ require File.expand_path file, File.dirname(__FILE__)
4
+ end
5
5
 
6
- class Redis
6
+ module Redis
7
7
  class Bin
8
8
 
9
- class StrictConnection < Connection
9
+ class RubyRedisServer < EventMachine::Connection
10
+
10
11
  include Strict
12
+ include Connection
13
+ include Protocol
14
+ include Sender
15
+
16
+ def initialize logger, databases, config={}
17
+ @logger = logger
18
+ @databases = databases
19
+ @database = databases[0]
20
+ @config = config
21
+ super
22
+ end
23
+
24
+ def post_init
25
+ authorized nil
26
+ set_comm_inactivity_timeout @config[:timeout]
27
+ end
28
+
29
+ def authorized password
30
+ return true if @authorized
31
+ return false unless @config[:requirepass] == password
32
+ extend Server
33
+ extend Keys
34
+ extend Strings
35
+ extend Lists
36
+ extend Sets
37
+ extend ZSets
38
+ extend Hashes
39
+ extend PubSub
40
+ @authorized = true
41
+ end
42
+
11
43
  end
12
44
 
13
45
  def self.server
@@ -28,44 +60,62 @@ class Redis
28
60
  config = Config.new(ARGV.empty? ? [] : ARGF)
29
61
 
30
62
  Dir.chdir config[:dir]
63
+
64
+ if config[:logfile] == 'stdout'
65
+ logger = Logger.new STDOUT
66
+ else
67
+ logger = Logger.new config[:logfile]
68
+ end
31
69
 
32
- Redis.logger config[:logfile] unless config[:logfile] == 'stdout'
33
-
34
- #TODO
35
- # Set server verbosity to 'debug'
36
- # it can be one of:
37
- # debug (a lot of information, useful for development/testing)
38
- # verbose (many rarely useful info, but not a mess like the debug level)
39
- # notice (moderately verbose, what you want in production probably)
40
- # warning (only very important / critical messages are logged)
41
- # loglevel verbose
70
+ if config[:loglevel] == 'debug'
71
+ logger.level = Logger::DEBUG
72
+ elsif config[:loglevel] == 'notice'
73
+ logger.level = Logger::NOTICE
74
+ elsif config[:loglevel] == 'warning'
75
+ logger.level = Logger::WARNING
76
+ elsif config[:loglevel] != 'verbose'
77
+ raise "Invalid log level. Must be one of debug, notice, warning, verbose."
78
+ else
79
+ logger.level = Logger::INFO
80
+ end
42
81
 
43
82
  if show_no_config_warning
44
- Redis.logger.warn "Warning: no config file specified, using the default config. In order to specify a config file use 'ruby-redis /path/to/redis.conf'"
83
+ logger.warn "Warning: no config file specified, using the default config. In order to specify a config file use 'ruby-redis /path/to/redis.conf'"
45
84
  end
46
-
47
- EventMachine.epoll
48
- EventMachine.run {
49
-
50
- (0...config[:databases]).each do |db_index|
51
- Redis.databases[db_index] ||= Database.new
85
+
86
+ if config[:daemonize]
87
+ exit!(0) if fork
88
+ Process::setsid
89
+ exit!(0) if fork
90
+ STDIN.reopen("/dev/null")
91
+ STDOUT.reopen("/dev/null", "w")
92
+ STDERR.reopen("/dev/null", "w")
93
+ begin
94
+ File.open(config[:pidfile], 'w') do |io|
95
+ io.write "%d\n" % Process.pid
96
+ end
97
+ rescue Exception => e
98
+ logger.error e.message
52
99
  end
100
+ end
101
+
102
+ EventMachine.run {
53
103
 
54
- #TODO support changing host and EventMachine::start_unix_domain_server
55
- EventMachine::start_server "127.0.0.1", config[:port], StrictConnection, config[:requirepass]
56
-
57
- if config[:daemonize]
58
- raise 'todo'
59
- # daemonize();
60
- # FILE *fp = fopen(server.pidfile,"w");
61
- # if (fp) { fprintf(fp,"%d\n",(int)getpid()); fclose(fp); }
104
+ databases = Array.new(config[:databases]) {Database.new}
105
+ started_message = "Server started, Ruby Redis version %s" % Redis::VERSION
106
+
107
+ if config[:unixsocket]
108
+ EventMachine::start_server config[:unixsocket], RubyRedisServer, logger, databases, config
109
+ logger.notice started_message
110
+ logger.notice "The server is now ready to accept connections at %s" % config[:unixsocket]
111
+ else
112
+ EventMachine::start_server config[:bind], config[:port], RubyRedisServer, logger, databases, config
113
+ logger.notice started_message
114
+ logger.notice "The server is now ready to accept connections on port %d" % config[:port]
62
115
  end
63
116
 
64
- Redis.logger.notice "Server started, Ruby Redis version %s" % Redis::VERSION
65
- Redis.logger.notice "The server is now ready to accept connections on port %d" % config[:port]
66
-
67
117
  # The test suite blocks until it gets the pid from the log.
68
- Redis.logger.flush
118
+ logger.flush
69
119
 
70
120
  }
71
121
 
data/lib/redis/bin.rbc CHANGED
@@ -1,6 +1,6 @@
1
1
  !RBIX
2
- 6235178746665710376
3
- x
2
+ 8948944263761558646
3
+ 18
4
4
  M
5
5
  1
6
6
  n
@@ -9,90 +9,99 @@ x
9
9
  10
10
10
  __script__
11
11
  i
12
- 81
13
- 5
14
- 45
12
+ 88
13
+ 7
15
14
  0
15
+ 64
16
+ 7
16
17
  1
18
+ 64
17
19
  7
18
20
  2
19
21
  64
20
- 45
21
- 0
22
+ 7
22
23
  3
23
- 65
24
- 49
24
+ 64
25
+ 7
25
26
  4
26
- 0
27
- 49
27
+ 64
28
+ 7
28
29
  5
29
- 1
30
- 49
30
+ 64
31
+ 7
31
32
  6
32
- 2
33
- 47
34
- 49
33
+ 64
35
34
  7
36
- 1
37
- 15
38
- 5
35
+ 7
36
+ 64
39
37
  7
40
38
  8
41
39
  64
42
- 47
43
- 49
40
+ 7
44
41
  9
45
- 1
46
- 15
47
- 5
42
+ 64
48
43
  7
49
44
  10
50
45
  64
51
- 47
52
- 49
53
- 9
54
- 1
55
- 15
56
- 5
57
46
  7
58
47
  11
59
48
  64
60
- 47
61
- 49
62
- 9
63
- 1
49
+ 7
50
+ 12
51
+ 64
52
+ 7
53
+ 13
54
+ 64
55
+ 7
56
+ 14
57
+ 64
58
+ 7
59
+ 15
60
+ 64
61
+ 7
62
+ 16
63
+ 64
64
+ 35
65
+ 17
66
+ 56
67
+ 17
68
+ 50
69
+ 18
70
+ 0
64
71
  15
65
72
  99
66
73
  7
67
- 12
74
+ 19
68
75
  1
69
76
  65
70
77
  49
71
- 13
78
+ 20
72
79
  3
73
80
  13
74
81
  99
75
82
  12
76
83
  7
77
- 14
84
+ 21
78
85
  12
79
86
  7
80
- 15
87
+ 22
81
88
  12
82
89
  65
83
90
  12
84
91
  49
85
- 16
92
+ 23
86
93
  4
87
94
  15
88
95
  49
89
- 14
96
+ 21
90
97
  0
91
98
  15
92
99
  2
93
100
  11
94
101
  I
95
- 6
102
+ 11
103
+ I
104
+ 0
96
105
  I
97
106
  0
98
107
  I
@@ -101,14 +110,117 @@ I
101
110
  0
102
111
  n
103
112
  p
104
- 17
113
+ 24
114
+ s
115
+ 6
116
+ reader
117
+ s
118
+ 6
119
+ sender
120
+ s
121
+ 7
122
+ version
123
+ s
124
+ 6
125
+ config
126
+ s
127
+ 6
128
+ logger
129
+ s
130
+ 6
131
+ strict
132
+ s
133
+ 10
134
+ connection
135
+ s
136
+ 8
137
+ protocol
138
+ s
139
+ 8
140
+ database
141
+ s
142
+ 6
143
+ server
144
+ s
145
+ 4
146
+ keys
147
+ s
148
+ 7
149
+ strings
150
+ s
151
+ 5
152
+ lists
153
+ s
154
+ 4
155
+ sets
156
+ s
157
+ 5
158
+ zsets
159
+ s
160
+ 6
161
+ hashes
162
+ s
163
+ 6
164
+ pubsub
165
+ M
166
+ 1
167
+ p
168
+ 2
169
+ x
170
+ 9
171
+ for_block
172
+ t
173
+ n
174
+ x
175
+ 9
176
+ __block__
177
+ i
178
+ 28
179
+ 57
180
+ 19
181
+ 0
182
+ 15
183
+ 5
184
+ 45
185
+ 0
186
+ 1
187
+ 20
188
+ 0
189
+ 45
190
+ 0
191
+ 2
192
+ 65
193
+ 49
194
+ 3
195
+ 0
196
+ 49
197
+ 4
198
+ 1
199
+ 49
200
+ 5
201
+ 2
202
+ 47
203
+ 49
204
+ 6
205
+ 1
206
+ 11
207
+ I
208
+ 7
209
+ I
210
+ 1
211
+ I
212
+ 1
213
+ I
214
+ 0
215
+ I
216
+ 1
217
+ n
218
+ p
219
+ 7
105
220
  x
106
221
  4
107
222
  File
108
223
  n
109
- s
110
- 8
111
- ../redis
112
224
  n
113
225
  x
114
226
  11
@@ -122,18 +234,33 @@ expand_path
122
234
  x
123
235
  7
124
236
  require
125
- s
126
- 6
127
- config
237
+ p
238
+ 7
239
+ I
240
+ 0
241
+ I
242
+ 1
243
+ I
244
+ 1
245
+ I
246
+ 2
247
+ I
248
+ 4
249
+ I
250
+ 3
251
+ I
252
+ 1c
128
253
  x
129
- 16
130
- require_relative
131
- s
132
- 10
133
- connection
134
- s
135
- 6
136
- logger
254
+ 49
255
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
256
+ p
257
+ 1
258
+ x
259
+ 4
260
+ file
261
+ x
262
+ 4
263
+ each
137
264
  x
138
265
  5
139
266
  Redis
@@ -189,6 +316,8 @@ I
189
316
  0
190
317
  I
191
318
  0
319
+ I
320
+ 0
192
321
  n
193
322
  p
194
323
  5
@@ -209,7 +338,7 @@ x
209
338
  3
210
339
  Bin
211
340
  i
212
- 42
341
+ 44
213
342
  5
214
343
  66
215
344
  99
@@ -218,38 +347,40 @@ i
218
347
  45
219
348
  1
220
349
  2
350
+ 43
351
+ 3
221
352
  65
222
353
  49
223
- 3
354
+ 4
224
355
  3
225
356
  13
226
357
  99
227
358
  12
228
359
  7
229
- 4
360
+ 5
230
361
  12
231
362
  7
232
- 5
363
+ 6
233
364
  12
234
365
  65
235
366
  12
236
367
  49
237
- 6
368
+ 7
238
369
  4
239
370
  15
240
371
  49
241
- 4
372
+ 5
242
373
  0
243
374
  15
244
375
  99
245
376
  7
246
- 7
247
- 7
248
377
  8
378
+ 7
379
+ 9
249
380
  65
250
381
  5
251
382
  49
252
- 6
383
+ 7
253
384
  4
254
385
  11
255
386
  I
@@ -260,16 +391,21 @@ I
260
391
  0
261
392
  I
262
393
  0
394
+ I
395
+ 0
263
396
  n
264
397
  p
265
- 9
398
+ 10
266
399
  x
267
- 16
268
- StrictConnection
400
+ 15
401
+ RubyRedisServer
402
+ x
403
+ 12
404
+ EventMachine
405
+ n
269
406
  x
270
407
  10
271
408
  Connection
272
- n
273
409
  x
274
410
  10
275
411
  open_class
@@ -281,10 +417,10 @@ M
281
417
  n
282
418
  n
283
419
  x
284
- 16
285
- StrictConnection
420
+ 15
421
+ RubyRedisServer
286
422
  i
287
- 11
423
+ 80
288
424
  5
289
425
  66
290
426
  5
@@ -295,9 +431,80 @@ i
295
431
  49
296
432
  2
297
433
  1
434
+ 15
435
+ 5
436
+ 45
437
+ 3
438
+ 4
439
+ 47
440
+ 49
441
+ 2
442
+ 1
443
+ 15
444
+ 5
445
+ 45
446
+ 5
447
+ 6
448
+ 47
449
+ 49
450
+ 2
451
+ 1
452
+ 15
453
+ 5
454
+ 45
455
+ 7
456
+ 8
457
+ 47
458
+ 49
459
+ 2
460
+ 1
461
+ 15
462
+ 99
463
+ 7
464
+ 9
465
+ 7
466
+ 10
467
+ 65
468
+ 67
469
+ 49
470
+ 11
471
+ 0
472
+ 49
473
+ 12
474
+ 4
475
+ 15
476
+ 99
477
+ 7
478
+ 13
479
+ 7
480
+ 14
481
+ 65
482
+ 67
483
+ 49
484
+ 11
485
+ 0
486
+ 49
487
+ 12
488
+ 4
489
+ 15
490
+ 99
491
+ 7
492
+ 15
493
+ 7
494
+ 16
495
+ 65
496
+ 67
497
+ 49
498
+ 11
499
+ 0
500
+ 49
501
+ 12
502
+ 4
298
503
  11
299
504
  I
300
- 2
505
+ 5
506
+ I
507
+ 0
301
508
  I
302
509
  0
303
510
  I
@@ -306,7 +513,7 @@ I
306
513
  0
307
514
  n
308
515
  p
309
- 3
516
+ 17
310
517
  x
311
518
  6
312
519
  Strict
@@ -314,423 +521,1518 @@ n
314
521
  x
315
522
  7
316
523
  include
317
- p
524
+ x
525
+ 10
526
+ Connection
527
+ n
528
+ x
529
+ 8
530
+ Protocol
531
+ n
532
+ x
533
+ 6
534
+ Sender
535
+ n
536
+ x
537
+ 10
538
+ initialize
539
+ M
540
+ 1
541
+ n
542
+ n
543
+ x
544
+ 10
545
+ initialize
546
+ i
547
+ 28
548
+ 23
549
+ 1
550
+ 10
551
+ 14
552
+ 44
553
+ 43
554
+ 0
555
+ 78
556
+ 49
557
+ 1
558
+ 1
559
+ 19
560
+ 1
561
+ 15
562
+ 20
563
+ 0
564
+ 38
565
+ 2
566
+ 15
567
+ 20
568
+ 1
569
+ 38
318
570
  3
571
+ 15
572
+ 54
573
+ 89
574
+ 4
575
+ 11
576
+ I
577
+ 4
319
578
  I
320
579
  2
321
580
  I
322
- a
581
+ 1
323
582
  I
324
- b
583
+ 0
584
+ I
585
+ 2
586
+ n
587
+ p
588
+ 5
589
+ x
590
+ 4
591
+ Hash
592
+ x
593
+ 16
594
+ new_from_literal
595
+ x
596
+ 10
597
+ @databases
598
+ x
599
+ 7
600
+ @config
601
+ x
602
+ 10
603
+ initialize
604
+ p
605
+ 9
606
+ I
607
+ -1
608
+ I
609
+ 10
610
+ I
611
+ e
612
+ I
613
+ 11
614
+ I
615
+ 13
616
+ I
617
+ 12
618
+ I
619
+ 18
620
+ I
621
+ 13
622
+ I
623
+ 1c
325
624
  x
326
625
  49
327
626
  /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
328
627
  p
329
- 0
628
+ 2
330
629
  x
331
- 13
332
- attach_method
630
+ 9
631
+ databases
333
632
  x
334
633
  6
335
- server
634
+ config
635
+ x
636
+ 17
637
+ method_visibility
638
+ x
639
+ 15
640
+ add_defn_method
641
+ x
642
+ 9
643
+ post_init
336
644
  M
337
645
  1
338
646
  n
339
647
  n
340
648
  x
341
- 6
342
- server
649
+ 9
650
+ post_init
343
651
  i
344
- 258
652
+ 33
345
653
  45
346
654
  0
347
655
  1
348
- 7
656
+ 49
349
657
  2
350
- 64
351
- 35
352
- 1
353
- 83
354
- 3
355
- 13
356
- 10
357
- 24
358
- 15
359
- 45
360
658
  0
361
- 4
362
- 7
363
- 5
364
- 64
365
- 35
366
- 1
367
- 83
659
+ 78
660
+ 49
368
661
  3
369
- 9
370
- 51
662
+ 1
663
+ 38
664
+ 4
665
+ 15
371
666
  5
372
- 7
373
- 6
374
- 64
375
- 45
376
- 7
377
- 8
378
- 43
379
- 9
380
- 49
381
- 10
382
667
  1
383
668
  47
384
669
  49
385
- 11
670
+ 5
386
671
  1
387
672
  15
388
673
  5
389
- 78
390
- 47
674
+ 39
675
+ 6
676
+ 7
677
+ 7
391
678
  49
392
- 12
679
+ 3
393
680
  1
681
+ 47
682
+ 49
394
683
  8
395
- 52
396
- 1
397
- 15
398
- 45
399
- 0
400
- 13
401
- 7
402
- 14
403
- 64
404
- 35
405
684
  1
406
- 83
685
+ 11
686
+ I
407
687
  3
408
- 13
409
- 10
410
- 76
411
- 15
412
- 45
688
+ I
413
689
  0
414
- 15
415
- 49
416
- 16
690
+ I
417
691
  0
418
- 79
419
- 85
420
- 17
421
- 9
422
- 106
423
- 45
692
+ I
693
+ 0
694
+ I
695
+ 0
696
+ n
697
+ p
698
+ 9
699
+ x
700
+ 5
701
+ Redis
702
+ n
703
+ x
704
+ 9
705
+ databases
706
+ x
707
+ 2
708
+ []
709
+ x
710
+ 9
711
+ @database
712
+ x
713
+ 10
714
+ authorized
715
+ x
716
+ 7
717
+ @config
718
+ x
719
+ 7
720
+ timeout
721
+ x
722
+ 27
723
+ set_comm_inactivity_timeout
724
+ p
725
+ 9
726
+ I
727
+ -1
728
+ I
729
+ 16
730
+ I
731
+ 0
732
+ I
733
+ 17
734
+ I
735
+ d
736
+ I
424
737
  18
738
+ I
739
+ 14
740
+ I
425
741
  19
426
- 7
427
- 20
428
- 64
742
+ I
743
+ 21
744
+ x
429
745
  49
746
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
747
+ p
748
+ 0
749
+ x
750
+ 10
751
+ authorized
752
+ M
753
+ 1
754
+ n
755
+ n
756
+ x
757
+ 10
758
+ authorized
759
+ i
760
+ 105
761
+ 39
762
+ 0
763
+ 9
764
+ 8
765
+ 2
430
766
  11
767
+ 8
768
+ 9
431
769
  1
432
770
  15
433
- 45
434
- 18
435
- 21
771
+ 39
772
+ 1
436
773
  7
437
- 22
438
- 64
774
+ 2
439
775
  49
440
- 11
776
+ 3
441
777
  1
778
+ 20
779
+ 0
780
+ 83
781
+ 4
782
+ 9
783
+ 26
784
+ 1
785
+ 8
786
+ 28
787
+ 3
788
+ 11
442
789
  15
443
790
  5
444
- 79
791
+ 45
792
+ 5
793
+ 6
445
794
  47
446
795
  49
447
- 12
796
+ 7
448
797
  1
798
+ 15
799
+ 5
800
+ 45
449
801
  8
450
- 107
802
+ 9
803
+ 47
804
+ 49
805
+ 7
451
806
  1
452
807
  15
808
+ 5
453
809
  45
454
- 0
455
- 23
810
+ 10
811
+ 11
812
+ 47
456
813
  49
457
- 16
458
- 0
459
- 78
460
- 83
461
- 3
462
- 19
463
- 0
814
+ 7
815
+ 1
464
816
  15
817
+ 5
465
818
  45
466
- 24
467
- 25
819
+ 12
468
820
  13
469
- 71
470
- 26
471
- 47
472
- 9
473
- 156
474
821
  47
475
822
  49
476
- 27
477
- 0
478
- 13
479
- 45
480
- 0
481
- 28
482
- 49
483
- 29
484
- 0
485
- 9
486
- 146
487
- 35
488
- 0
489
- 8
490
- 149
823
+ 7
824
+ 1
825
+ 15
826
+ 5
491
827
  45
492
- 30
493
- 31
828
+ 14
829
+ 15
494
830
  47
495
831
  49
496
- 32
832
+ 7
497
833
  1
498
834
  15
499
- 8
500
- 174
501
- 45
502
- 0
503
- 33
504
- 49
505
- 29
506
- 0
507
- 9
508
- 168
509
- 35
510
- 0
511
- 8
512
- 171
835
+ 5
513
836
  45
514
- 30
515
- 34
837
+ 16
838
+ 17
839
+ 47
516
840
  49
517
- 26
841
+ 7
518
842
  1
843
+ 15
844
+ 5
845
+ 45
846
+ 18
519
847
  19
848
+ 47
849
+ 49
850
+ 7
520
851
  1
521
852
  15
853
+ 5
522
854
  45
523
- 35
524
- 36
525
855
  20
526
- 1
527
- 7
528
- 37
529
- 49
530
- 38
531
- 1
856
+ 21
857
+ 47
532
858
  49
533
- 39
859
+ 7
534
860
  1
535
861
  15
536
- 20
537
- 1
538
- 7
539
- 40
540
- 49
862
+ 2
541
863
  38
542
- 1
543
- 7
544
- 41
545
- 64
546
- 83
864
+ 0
865
+ 11
866
+ I
547
867
  3
548
- 9
549
- 208
868
+ I
550
869
  1
551
- 8
552
- 221
553
- 45
554
- 7
555
- 42
556
- 20
870
+ I
557
871
  1
558
- 7
559
- 40
560
- 49
561
- 38
872
+ I
873
+ 0
874
+ I
562
875
  1
563
- 49
564
- 43
876
+ n
877
+ p
878
+ 22
879
+ x
880
+ 11
881
+ @authorized
882
+ x
883
+ 7
884
+ @config
885
+ x
886
+ 11
887
+ requirepass
888
+ x
889
+ 2
890
+ []
891
+ x
892
+ 2
893
+ ==
894
+ x
895
+ 6
896
+ Server
897
+ n
898
+ x
899
+ 6
900
+ extend
901
+ x
902
+ 4
903
+ Keys
904
+ n
905
+ x
906
+ 7
907
+ Strings
908
+ n
909
+ x
910
+ 5
911
+ Lists
912
+ n
913
+ x
914
+ 4
915
+ Sets
916
+ n
917
+ x
918
+ 5
919
+ ZSets
920
+ n
921
+ x
922
+ 6
923
+ Hashes
924
+ n
925
+ x
926
+ 6
927
+ PubSub
928
+ n
929
+ p
930
+ 29
931
+ I
932
+ -1
933
+ I
934
+ 1c
935
+ I
936
+ 0
937
+ I
938
+ 1d
939
+ I
940
+ 9
941
+ I
942
+ 0
943
+ I
944
+ a
945
+ I
946
+ 1e
947
+ I
948
+ 1c
949
+ I
950
+ 0
951
+ I
952
+ 1d
953
+ I
954
+ 1f
955
+ I
956
+ 26
957
+ I
958
+ 20
959
+ I
960
+ 2f
961
+ I
962
+ 21
963
+ I
964
+ 38
965
+ I
966
+ 22
967
+ I
968
+ 41
969
+ I
970
+ 23
971
+ I
972
+ 4a
973
+ I
974
+ 24
975
+ I
976
+ 53
977
+ I
978
+ 25
979
+ I
980
+ 5c
981
+ I
982
+ 26
983
+ I
984
+ 65
985
+ I
986
+ 27
987
+ I
988
+ 69
989
+ x
990
+ 49
991
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
992
+ p
993
+ 1
994
+ x
995
+ 8
996
+ password
997
+ p
998
+ 15
999
+ I
1000
+ 2
1001
+ I
1002
+ b
1003
+ I
1004
+ b
1005
+ I
1006
+ c
1007
+ I
1008
+ 14
1009
+ I
1010
+ d
1011
+ I
1012
+ 1d
1013
+ I
1014
+ e
1015
+ I
1016
+ 26
1017
+ I
1018
+ 10
1019
+ I
1020
+ 34
1021
+ I
1022
+ 16
1023
+ I
1024
+ 42
1025
+ I
1026
+ 1c
1027
+ I
1028
+ 50
1029
+ x
1030
+ 49
1031
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
1032
+ p
1033
+ 0
1034
+ x
1035
+ 13
1036
+ attach_method
1037
+ x
1038
+ 6
1039
+ server
1040
+ M
1041
+ 1
1042
+ n
1043
+ n
1044
+ x
1045
+ 6
1046
+ server
1047
+ i
1048
+ 581
1049
+ 45
1050
+ 0
1051
+ 1
1052
+ 7
1053
+ 2
1054
+ 64
1055
+ 35
1056
+ 1
1057
+ 83
1058
+ 3
1059
+ 13
1060
+ 10
1061
+ 24
1062
+ 15
1063
+ 45
1064
+ 0
1065
+ 4
1066
+ 7
1067
+ 5
1068
+ 64
1069
+ 35
1070
+ 1
1071
+ 83
1072
+ 3
1073
+ 9
1074
+ 51
1075
+ 5
1076
+ 7
1077
+ 6
1078
+ 64
1079
+ 45
1080
+ 7
1081
+ 8
1082
+ 43
1083
+ 9
1084
+ 49
1085
+ 10
1086
+ 1
1087
+ 47
1088
+ 49
1089
+ 11
1090
+ 1
1091
+ 15
1092
+ 5
1093
+ 78
1094
+ 47
1095
+ 49
1096
+ 12
1097
+ 1
1098
+ 8
1099
+ 52
1100
+ 1
1101
+ 15
1102
+ 45
1103
+ 0
1104
+ 13
1105
+ 7
1106
+ 14
1107
+ 64
1108
+ 35
1109
+ 1
1110
+ 83
1111
+ 3
1112
+ 13
1113
+ 10
1114
+ 76
1115
+ 15
1116
+ 45
1117
+ 0
1118
+ 15
1119
+ 49
1120
+ 16
1121
+ 0
1122
+ 79
1123
+ 85
1124
+ 17
1125
+ 9
1126
+ 106
1127
+ 45
1128
+ 18
1129
+ 19
1130
+ 7
1131
+ 20
1132
+ 64
1133
+ 49
1134
+ 11
1135
+ 1
1136
+ 15
1137
+ 45
1138
+ 18
1139
+ 21
1140
+ 7
1141
+ 22
1142
+ 64
1143
+ 49
1144
+ 11
1145
+ 1
1146
+ 15
1147
+ 5
1148
+ 79
1149
+ 47
1150
+ 49
1151
+ 12
1152
+ 1
1153
+ 8
1154
+ 107
1155
+ 1
1156
+ 15
1157
+ 45
1158
+ 0
1159
+ 23
1160
+ 49
1161
+ 16
1162
+ 0
1163
+ 78
1164
+ 83
1165
+ 3
1166
+ 19
1167
+ 0
1168
+ 15
1169
+ 45
1170
+ 24
1171
+ 25
1172
+ 13
1173
+ 71
1174
+ 26
1175
+ 47
1176
+ 9
1177
+ 156
1178
+ 47
1179
+ 49
1180
+ 27
1181
+ 0
1182
+ 13
1183
+ 45
1184
+ 0
1185
+ 28
1186
+ 49
1187
+ 29
1188
+ 0
1189
+ 9
1190
+ 146
1191
+ 35
1192
+ 0
1193
+ 8
1194
+ 149
1195
+ 45
1196
+ 30
1197
+ 31
1198
+ 47
1199
+ 49
1200
+ 32
1201
+ 1
1202
+ 15
1203
+ 8
1204
+ 174
1205
+ 45
1206
+ 0
1207
+ 33
1208
+ 49
1209
+ 29
1210
+ 0
1211
+ 9
1212
+ 168
1213
+ 35
1214
+ 0
1215
+ 8
1216
+ 171
1217
+ 45
1218
+ 30
1219
+ 34
1220
+ 49
1221
+ 26
1222
+ 1
1223
+ 19
1224
+ 1
1225
+ 15
1226
+ 20
1227
+ 1
1228
+ 7
1229
+ 35
1230
+ 49
1231
+ 36
1232
+ 1
1233
+ 7
1234
+ 37
1235
+ 64
1236
+ 83
1237
+ 3
1238
+ 9
1239
+ 211
1240
+ 45
1241
+ 7
1242
+ 38
1243
+ 49
1244
+ 39
1245
+ 0
1246
+ 45
1247
+ 40
1248
+ 41
1249
+ 43
1250
+ 42
1251
+ 13
1252
+ 18
1253
+ 2
1254
+ 49
1255
+ 43
1256
+ 1
1257
+ 15
1258
+ 8
1259
+ 327
1260
+ 20
1261
+ 1
1262
+ 7
1263
+ 35
1264
+ 49
1265
+ 36
1266
+ 1
1267
+ 7
1268
+ 44
1269
+ 64
1270
+ 83
1271
+ 3
1272
+ 9
1273
+ 245
1274
+ 45
1275
+ 7
1276
+ 45
1277
+ 49
1278
+ 39
1279
+ 0
1280
+ 45
1281
+ 40
1282
+ 46
1283
+ 43
1284
+ 47
1285
+ 13
1286
+ 18
1287
+ 2
1288
+ 49
1289
+ 43
1290
+ 1
1291
+ 15
1292
+ 8
1293
+ 327
1294
+ 20
1295
+ 1
1296
+ 7
1297
+ 35
1298
+ 49
1299
+ 36
1300
+ 1
1301
+ 7
1302
+ 48
1303
+ 64
1304
+ 83
1305
+ 3
1306
+ 9
1307
+ 279
1308
+ 45
1309
+ 7
1310
+ 49
1311
+ 49
1312
+ 39
1313
+ 0
1314
+ 45
1315
+ 40
1316
+ 50
1317
+ 43
1318
+ 51
1319
+ 13
1320
+ 18
1321
+ 2
1322
+ 49
1323
+ 43
1324
+ 1
1325
+ 15
1326
+ 8
1327
+ 327
1328
+ 20
1329
+ 1
1330
+ 7
1331
+ 35
1332
+ 49
1333
+ 36
1334
+ 1
1335
+ 7
1336
+ 52
1337
+ 64
1338
+ 83
1339
+ 3
1340
+ 10
1341
+ 296
1342
+ 2
1343
+ 8
1344
+ 297
1345
+ 3
1346
+ 9
1347
+ 309
1348
+ 5
1349
+ 7
1350
+ 53
1351
+ 64
1352
+ 47
1353
+ 49
1354
+ 54
1355
+ 1
1356
+ 8
1357
+ 327
1358
+ 45
1359
+ 7
1360
+ 55
1361
+ 49
1362
+ 39
1363
+ 0
1364
+ 45
1365
+ 40
1366
+ 56
1367
+ 43
1368
+ 57
1369
+ 13
1370
+ 18
1371
+ 2
1372
+ 49
1373
+ 43
1374
+ 1
1375
+ 15
1376
+ 15
1377
+ 45
1378
+ 58
1379
+ 59
1380
+ 20
1381
+ 1
1382
+ 7
1383
+ 60
1384
+ 49
1385
+ 36
1386
+ 1
1387
+ 49
1388
+ 61
1389
+ 1
1390
+ 15
1391
+ 20
1392
+ 1
1393
+ 7
1394
+ 62
1395
+ 49
1396
+ 36
1397
+ 1
1398
+ 7
1399
+ 63
1400
+ 64
1401
+ 83
1402
+ 3
1403
+ 9
1404
+ 359
1405
+ 1
1406
+ 8
1407
+ 372
1408
+ 45
1409
+ 7
1410
+ 64
1411
+ 20
1412
+ 1
1413
+ 7
1414
+ 62
1415
+ 49
1416
+ 36
1417
+ 1
1418
+ 49
1419
+ 39
1420
+ 1
1421
+ 15
1422
+ 20
1423
+ 0
1424
+ 9
1425
+ 391
1426
+ 45
1427
+ 7
1428
+ 65
1429
+ 49
1430
+ 39
1431
+ 0
1432
+ 7
1433
+ 66
1434
+ 64
1435
+ 49
1436
+ 67
1437
+ 1
1438
+ 8
1439
+ 392
1440
+ 1
1441
+ 15
1442
+ 45
1443
+ 68
1444
+ 69
1445
+ 20
1446
+ 1
1447
+ 7
1448
+ 70
1449
+ 49
1450
+ 36
1451
+ 1
1452
+ 56
1453
+ 71
1454
+ 50
1455
+ 26
1456
+ 1
1457
+ 19
1458
+ 2
1459
+ 15
1460
+ 20
1461
+ 1
1462
+ 7
1463
+ 72
1464
+ 49
1465
+ 36
1466
+ 1
1467
+ 9
1468
+ 570
1469
+ 5
1470
+ 48
1471
+ 73
1472
+ 9
1473
+ 433
1474
+ 5
1475
+ 78
1476
+ 47
1477
+ 49
1478
+ 74
1479
+ 1
1480
+ 8
1481
+ 434
1482
+ 1
1483
+ 15
1484
+ 45
1485
+ 75
1486
+ 76
1487
+ 49
1488
+ 77
1489
+ 0
1490
+ 15
1491
+ 5
1492
+ 48
1493
+ 73
1494
+ 9
1495
+ 455
1496
+ 5
1497
+ 78
1498
+ 47
1499
+ 49
1500
+ 74
1501
+ 1
1502
+ 8
1503
+ 456
1504
+ 1
1505
+ 15
1506
+ 45
1507
+ 78
1508
+ 79
1509
+ 7
1510
+ 80
1511
+ 64
1512
+ 49
1513
+ 81
1514
+ 1
1515
+ 15
1516
+ 45
1517
+ 82
1518
+ 83
1519
+ 7
1520
+ 80
1521
+ 64
1522
+ 7
1523
+ 84
1524
+ 64
1525
+ 49
1526
+ 81
1527
+ 2
1528
+ 15
1529
+ 45
1530
+ 18
1531
+ 85
1532
+ 7
1533
+ 80
1534
+ 64
1535
+ 7
1536
+ 84
1537
+ 64
1538
+ 49
1539
+ 81
1540
+ 2
1541
+ 15
1542
+ 26
1543
+ 93
1544
+ 0
1545
+ 15
1546
+ 29
1547
+ 521
1548
+ 0
1549
+ 45
1550
+ 86
1551
+ 87
1552
+ 20
1553
+ 1
1554
+ 7
1555
+ 88
1556
+ 49
1557
+ 36
1558
+ 1
1559
+ 7
1560
+ 84
1561
+ 64
1562
+ 56
1563
+ 89
1564
+ 50
1565
+ 90
1566
+ 2
1567
+ 30
1568
+ 8
1569
+ 565
1570
+ 26
1571
+ 93
1572
+ 1
1573
+ 15
1574
+ 24
1575
+ 13
1576
+ 45
1577
+ 91
1578
+ 92
1579
+ 12
1580
+ 49
1581
+ 93
1582
+ 1
1583
+ 10
1584
+ 538
1585
+ 8
1586
+ 560
1587
+ 15
1588
+ 24
1589
+ 19
1590
+ 3
1591
+ 15
1592
+ 45
1593
+ 7
1594
+ 94
1595
+ 49
1596
+ 39
1597
+ 0
1598
+ 20
1599
+ 3
1600
+ 49
1601
+ 95
1602
+ 0
1603
+ 49
1604
+ 96
1605
+ 1
1606
+ 25
1607
+ 8
1608
+ 565
1609
+ 15
1610
+ 92
1611
+ 1
1612
+ 27
1613
+ 34
1614
+ 92
1615
+ 0
1616
+ 27
1617
+ 8
1618
+ 571
1619
+ 1
1620
+ 15
1621
+ 45
1622
+ 97
1623
+ 98
1624
+ 56
1625
+ 99
1626
+ 50
1627
+ 100
1628
+ 0
1629
+ 11
1630
+ I
1631
+ a
1632
+ I
1633
+ 4
1634
+ I
1635
+ 0
1636
+ I
1637
+ 0
1638
+ I
1639
+ 0
1640
+ n
1641
+ p
1642
+ 101
1643
+ x
1644
+ 4
1645
+ ARGV
1646
+ n
1647
+ s
1648
+ 2
1649
+ -v
1650
+ x
1651
+ 2
1652
+ ==
1653
+ n
1654
+ s
1655
+ 9
1656
+ --version
1657
+ s
1658
+ 31
1659
+ Redis server version %s (Ruby)
1660
+
1661
+ x
1662
+ 5
1663
+ Redis
1664
+ n
1665
+ x
1666
+ 7
1667
+ VERSION
1668
+ x
1669
+ 1
1670
+ %
1671
+ x
1672
+ 5
1673
+ print
1674
+ x
1675
+ 4
1676
+ exit
1677
+ n
1678
+ s
1679
+ 6
1680
+ --help
1681
+ n
1682
+ x
1683
+ 4
1684
+ size
1685
+ x
1686
+ 1
1687
+ >
1688
+ x
1689
+ 6
1690
+ STDERR
1691
+ n
1692
+ s
1693
+ 40
1694
+ Usage: ruby-redis [/path/to/redis.conf]
1695
+
1696
+ n
1697
+ s
1698
+ 45
1699
+ ruby-redis - (read config from stdin)
1700
+
1701
+ n
1702
+ x
1703
+ 6
1704
+ Config
1705
+ n
1706
+ x
1707
+ 3
1708
+ new
1709
+ x
1710
+ 8
1711
+ allocate
1712
+ n
1713
+ x
1714
+ 6
1715
+ empty?
1716
+ x
1717
+ 4
1718
+ ARGF
1719
+ n
1720
+ x
1721
+ 10
1722
+ initialize
1723
+ n
1724
+ n
1725
+ x
1726
+ 8
1727
+ loglevel
1728
+ x
1729
+ 2
1730
+ []
1731
+ s
1732
+ 5
1733
+ debug
1734
+ n
1735
+ x
1736
+ 6
1737
+ logger
1738
+ x
1739
+ 6
1740
+ Logger
1741
+ n
1742
+ x
1743
+ 5
1744
+ DEBUG
1745
+ x
1746
+ 6
1747
+ level=
1748
+ s
1749
+ 6
1750
+ notice
1751
+ n
1752
+ n
1753
+ x
1754
+ 6
1755
+ NOTICE
1756
+ s
1757
+ 7
1758
+ warning
1759
+ n
1760
+ n
1761
+ x
1762
+ 7
1763
+ WARNING
1764
+ s
1765
+ 7
1766
+ verbose
1767
+ s
1768
+ 66
1769
+ Invalid log level. Must be one of debug, notice, warning, verbose.
1770
+ x
1771
+ 5
1772
+ raise
1773
+ n
1774
+ n
1775
+ x
1776
+ 4
1777
+ INFO
1778
+ x
1779
+ 3
1780
+ Dir
1781
+ n
1782
+ x
1783
+ 3
1784
+ dir
1785
+ x
1786
+ 5
1787
+ chdir
1788
+ x
1789
+ 7
1790
+ logfile
1791
+ s
1792
+ 6
1793
+ stdout
1794
+ n
1795
+ n
1796
+ s
1797
+ 131
1798
+ Warning: no config file specified, using the default config. In order to specify a config file use 'ruby-redis /path/to/redis.conf'
1799
+ x
1800
+ 4
1801
+ warn
1802
+ x
1803
+ 5
1804
+ Array
1805
+ n
1806
+ x
1807
+ 9
1808
+ databases
1809
+ M
565
1810
  1
566
- 15
567
- 20
568
- 0
1811
+ p
1812
+ 2
1813
+ x
569
1814
  9
570
- 240
1815
+ for_block
1816
+ t
1817
+ n
1818
+ x
1819
+ 6
1820
+ server
1821
+ i
1822
+ 25
571
1823
  45
572
- 7
573
- 44
574
- 49
575
- 43
576
1824
  0
577
- 7
578
- 45
579
- 64
580
- 49
581
- 46
582
- 1
583
- 8
584
- 241
585
1825
  1
586
- 15
587
- 45
1826
+ 13
1827
+ 71
1828
+ 2
1829
+ 47
1830
+ 9
1831
+ 21
588
1832
  47
589
- 48
590
1833
  49
1834
+ 3
1835
+ 0
1836
+ 13
1837
+ 47
591
1838
  49
1839
+ 4
592
1840
  0
593
1841
  15
594
- 45
595
- 47
596
- 50
597
- 56
598
- 51
599
- 50
600
- 52
1842
+ 8
1843
+ 24
1844
+ 49
1845
+ 2
601
1846
  0
602
1847
  11
603
1848
  I
604
- 5
1849
+ 3
605
1850
  I
606
- 2
1851
+ 0
607
1852
  I
608
1853
  0
609
1854
  I
610
1855
  0
611
- n
1856
+ I
1857
+ 0
1858
+ I
1859
+ -2
612
1860
  p
613
- 53
1861
+ 5
614
1862
  x
615
- 4
616
- ARGV
1863
+ 8
1864
+ Database
617
1865
  n
618
- s
619
- 2
620
- -v
621
1866
  x
622
- 2
623
- ==
624
- n
625
- s
1867
+ 3
1868
+ new
1869
+ x
1870
+ 8
1871
+ allocate
1872
+ x
1873
+ 10
1874
+ initialize
1875
+ p
1876
+ 3
1877
+ I
1878
+ 0
1879
+ I
1880
+ 51
1881
+ I
1882
+ 19
1883
+ x
1884
+ 49
1885
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
1886
+ p
1887
+ 0
1888
+ x
626
1889
  9
627
- --version
628
- s
629
- 31
630
- Redis server version %s (Ruby)
631
-
1890
+ daemonize
1891
+ x
1892
+ 4
1893
+ fork
632
1894
  x
633
1895
  5
634
- Redis
635
- n
1896
+ exit!
636
1897
  x
637
1898
  7
638
- VERSION
1899
+ Process
1900
+ n
639
1901
  x
640
- 1
641
- %
1902
+ 6
1903
+ setsid
642
1904
  x
643
1905
  5
644
- print
645
- x
646
- 4
647
- exit
1906
+ STDIN
648
1907
  n
649
1908
  s
650
- 6
651
- --help
652
- n
653
- x
654
- 4
655
- size
1909
+ 9
1910
+ /dev/null
656
1911
  x
657
- 1
658
- >
1912
+ 6
1913
+ reopen
659
1914
  x
660
1915
  6
661
- STDERR
662
- n
663
- s
664
- 40
665
- Usage: ruby-redis [/path/to/redis.conf]
666
-
1916
+ STDOUT
667
1917
  n
668
1918
  s
669
- 45
670
- ruby-redis - (read config from stdin)
671
-
1919
+ 1
1920
+ w
672
1921
  n
673
1922
  x
674
- 6
675
- Config
1923
+ 4
1924
+ File
676
1925
  n
677
1926
  x
678
- 3
679
- new
1927
+ 7
1928
+ pidfile
1929
+ M
1930
+ 1
1931
+ p
1932
+ 2
680
1933
  x
681
- 8
682
- allocate
1934
+ 9
1935
+ for_block
1936
+ t
683
1937
  n
684
1938
  x
685
1939
  6
686
- empty?
687
- x
1940
+ server
1941
+ i
1942
+ 22
1943
+ 57
1944
+ 19
1945
+ 0
1946
+ 15
1947
+ 20
1948
+ 0
1949
+ 7
1950
+ 0
1951
+ 64
1952
+ 45
1953
+ 1
1954
+ 2
1955
+ 49
1956
+ 3
1957
+ 0
1958
+ 49
688
1959
  4
689
- ARGF
1960
+ 1
1961
+ 49
1962
+ 5
1963
+ 1
1964
+ 11
1965
+ I
1966
+ 5
1967
+ I
1968
+ 1
1969
+ I
1970
+ 1
1971
+ I
1972
+ 0
1973
+ I
1974
+ 1
690
1975
  n
1976
+ p
1977
+ 6
1978
+ s
1979
+ 3
1980
+ %d
1981
+
691
1982
  x
692
- 10
693
- initialize
694
- n
1983
+ 7
1984
+ Process
695
1985
  n
696
1986
  x
697
1987
  3
698
- Dir
699
- n
1988
+ pid
700
1989
  x
701
- 3
702
- dir
1990
+ 1
1991
+ %
1992
+ x
1993
+ 5
1994
+ write
1995
+ p
1996
+ 5
1997
+ I
1998
+ 0
1999
+ I
2000
+ 5e
2001
+ I
2002
+ 4
2003
+ I
2004
+ 5f
2005
+ I
2006
+ 16
2007
+ x
2008
+ 49
2009
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
2010
+ p
2011
+ 1
703
2012
  x
704
2013
  2
705
- []
2014
+ io
706
2015
  x
707
- 5
708
- chdir
2016
+ 4
2017
+ open
709
2018
  x
710
- 7
711
- logfile
712
- s
713
- 6
714
- stdout
2019
+ 9
2020
+ Exception
715
2021
  n
716
2022
  x
717
- 6
718
- logger
2023
+ 3
2024
+ ===
719
2025
  n
720
- s
721
- 131
722
- Warning: no config file specified, using the default config. In order to specify a config file use 'ruby-redis /path/to/redis.conf'
723
2026
  x
724
- 4
725
- warn
2027
+ 7
2028
+ message
2029
+ x
2030
+ 5
2031
+ error
726
2032
  x
727
2033
  12
728
2034
  EventMachine
729
2035
  n
730
- x
731
- 5
732
- epoll
733
- n
734
2036
  M
735
2037
  1
736
2038
  p
@@ -744,341 +2046,234 @@ x
744
2046
  6
745
2047
  server
746
2048
  i
747
- 128
748
- 44
2049
+ 163
2050
+ 7
2051
+ 0
2052
+ 64
2053
+ 45
2054
+ 1
2055
+ 2
749
2056
  43
2057
+ 3
2058
+ 49
2059
+ 4
2060
+ 1
2061
+ 19
750
2062
  0
751
- 78
2063
+ 15
752
2064
  21
753
2065
  1
754
2066
  1
755
2067
  7
756
- 1
2068
+ 5
757
2069
  49
758
- 2
2070
+ 6
759
2071
  1
760
- 2
761
- 49
762
- 3
763
- 3
764
- 56
765
- 4
766
- 50
767
- 5
768
- 0
769
- 15
2072
+ 9
2073
+ 85
770
2074
  45
771
- 6
772
- 7
773
2075
  7
774
2076
  8
775
- 64
776
2077
  21
777
2078
  1
778
2079
  1
779
2080
  7
780
- 9
2081
+ 5
781
2082
  49
782
- 2
2083
+ 6
783
2084
  1
784
2085
  45
2086
+ 9
785
2087
  10
786
- 11
787
2088
  21
788
2089
  1
789
- 1
790
- 7
791
- 12
792
- 49
793
2090
  2
794
- 1
795
- 49
796
- 13
797
- 4
798
- 15
799
2091
  21
800
2092
  1
801
2093
  1
802
- 7
803
- 14
804
- 49
805
- 2
806
- 1
807
- 9
808
- 71
809
- 5
810
- 7
811
- 15
812
- 64
813
- 47
814
2094
  49
815
- 16
816
- 1
817
- 8
818
- 72
819
- 1
2095
+ 11
2096
+ 4
820
2097
  15
821
2098
  45
822
- 17
823
- 18
2099
+ 1
2100
+ 12
824
2101
  49
825
- 19
2102
+ 13
826
2103
  0
827
- 7
828
2104
  20
829
- 64
830
- 45
831
- 17
832
- 21
833
- 43
834
- 22
835
- 49
836
- 23
837
- 1
2105
+ 0
838
2106
  49
839
- 24
2107
+ 14
840
2108
  1
841
2109
  15
842
2110
  45
843
- 17
844
- 25
2111
+ 1
2112
+ 15
845
2113
  49
846
- 19
2114
+ 13
847
2115
  0
848
2116
  7
849
- 26
2117
+ 16
850
2118
  64
851
2119
  21
852
2120
  1
853
2121
  1
854
2122
  7
855
- 9
2123
+ 5
856
2124
  49
857
- 2
2125
+ 6
858
2126
  1
859
2127
  49
860
- 23
2128
+ 4
861
2129
  1
862
2130
  49
863
- 24
2131
+ 14
864
2132
  1
865
- 15
2133
+ 8
2134
+ 152
866
2135
  45
2136
+ 7
867
2137
  17
868
- 27
2138
+ 21
2139
+ 1
2140
+ 1
2141
+ 7
2142
+ 18
869
2143
  49
2144
+ 6
2145
+ 1
2146
+ 21
2147
+ 1
2148
+ 1
2149
+ 7
870
2150
  19
871
- 0
872
2151
  49
873
- 28
874
- 0
875
- 11
876
- I
877
- 7
878
- I
879
- 0
880
- I
881
- 0
882
- I
883
- 0
884
- I
885
- -2
886
- p
887
- 29
888
- x
889
- 5
890
- Range
891
- x
2152
+ 6
2153
+ 1
2154
+ 45
892
2155
  9
893
- databases
894
- x
895
- 2
896
- []
897
- x
898
- 3
899
- new
900
- M
2156
+ 20
2157
+ 21
901
2158
  1
902
- p
903
2159
  2
904
- x
905
- 9
906
- for_block
907
- t
908
- n
909
- x
910
- 6
911
- server
912
- i
913
- 59
914
- 57
915
- 19
916
- 0
2160
+ 21
2161
+ 1
2162
+ 1
2163
+ 49
2164
+ 11
2165
+ 5
917
2166
  15
918
2167
  45
919
- 0
920
2168
  1
2169
+ 21
921
2170
  49
922
- 2
2171
+ 13
923
2172
  0
924
2173
  20
925
2174
  0
926
- 14
927
- 2
928
2175
  49
929
- 3
2176
+ 14
930
2177
  1
931
- 13
932
- 10
933
- 54
934
2178
  15
935
2179
  45
936
- 4
937
- 5
2180
+ 1
2181
+ 22
2182
+ 49
938
2183
  13
939
- 71
2184
+ 0
2185
+ 7
2186
+ 23
2187
+ 64
2188
+ 21
2189
+ 1
2190
+ 1
2191
+ 7
2192
+ 19
2193
+ 49
940
2194
  6
941
- 47
942
- 9
943
- 42
944
- 47
2195
+ 1
945
2196
  49
946
- 7
947
- 0
948
- 13
949
- 47
2197
+ 4
2198
+ 1
950
2199
  49
951
- 8
952
- 0
2200
+ 14
2201
+ 1
953
2202
  15
954
- 8
955
2203
  45
2204
+ 1
2205
+ 24
956
2206
  49
957
- 6
958
- 0
959
2207
  13
960
- 18
961
- 3
2208
+ 0
962
2209
  49
963
- 9
964
- 2
965
- 15
966
- 8
967
- 58
968
- 18
969
- 2
970
- 16
971
- 2
2210
+ 25
2211
+ 0
972
2212
  11
973
2213
  I
974
- 6
975
- I
976
- 1
977
- I
978
- 1
979
- I
980
- 1
981
- n
982
- p
983
- 10
984
- x
985
- 5
986
- Redis
987
- n
988
- x
989
- 9
990
- databases
991
- x
992
- 2
993
- []
994
- x
995
- 8
996
- Database
997
- n
998
- x
999
- 3
1000
- new
1001
- x
1002
2214
  8
1003
- allocate
1004
- x
1005
- 10
1006
- initialize
1007
- x
1008
- 3
1009
- []=
1010
- p
1011
- 5
1012
2215
  I
1013
- 0
2216
+ 1
1014
2217
  I
1015
- 32
2218
+ 0
1016
2219
  I
1017
- 4
2220
+ 0
1018
2221
  I
1019
- 33
2222
+ 0
1020
2223
  I
1021
- 3b
1022
- x
1023
- 49
1024
- /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
2224
+ -2
1025
2225
  p
2226
+ 26
2227
+ s
2228
+ 37
2229
+ Server started, Ruby Redis version %s
2230
+ x
2231
+ 5
2232
+ Redis
2233
+ n
2234
+ x
2235
+ 7
2236
+ VERSION
2237
+ x
1026
2238
  1
2239
+ %
1027
2240
  x
1028
- 8
1029
- db_index
2241
+ 10
2242
+ unixsocket
1030
2243
  x
1031
- 4
1032
- each
2244
+ 2
2245
+ []
1033
2246
  x
1034
2247
  12
1035
2248
  EventMachine
1036
2249
  n
1037
- s
1038
- 9
1039
- 127.0.0.1
1040
- x
1041
- 4
1042
- port
1043
2250
  x
1044
- 16
1045
- StrictConnection
2251
+ 15
2252
+ RubyRedisServer
1046
2253
  n
1047
2254
  x
1048
- 11
1049
- requirepass
1050
- x
1051
2255
  12
1052
2256
  start_server
1053
- x
1054
- 9
1055
- daemonize
1056
- s
1057
- 4
1058
- todo
1059
- x
1060
- 5
1061
- raise
1062
- x
1063
- 5
1064
- Redis
1065
2257
  n
1066
2258
  x
1067
2259
  6
1068
2260
  logger
2261
+ x
2262
+ 6
2263
+ notice
2264
+ n
1069
2265
  s
1070
- 37
1071
- Server started, Ruby Redis version %s
2266
+ 51
2267
+ The server is now ready to accept connections at %s
1072
2268
  n
1073
2269
  x
1074
- 7
1075
- VERSION
1076
- x
1077
- 1
1078
- %
2270
+ 4
2271
+ bind
1079
2272
  x
1080
- 6
1081
- notice
2273
+ 4
2274
+ port
2275
+ n
2276
+ n
1082
2277
  n
1083
2278
  s
1084
2279
  56
@@ -1088,75 +2283,82 @@ x
1088
2283
  5
1089
2284
  flush
1090
2285
  p
1091
- 19
2286
+ 21
1092
2287
  I
1093
2288
  0
1094
2289
  I
1095
- 32
2290
+ 68
1096
2291
  I
1097
- 16
2292
+ e
1098
2293
  I
1099
- 37
2294
+ 6a
1100
2295
  I
1101
- 33
2296
+ 18
1102
2297
  I
1103
- 39
2298
+ 6b
1104
2299
  I
1105
- 3d
2300
+ 30
1106
2301
  I
1107
- 3a
2302
+ 6c
1108
2303
  I
1109
- 47
2304
+ 3c
1110
2305
  I
1111
- 39
2306
+ 6d
1112
2307
  I
1113
- 48
2308
+ 55
1114
2309
  I
1115
- 0
2310
+ 6f
1116
2311
  I
1117
- 49
2312
+ 75
1118
2313
  I
1119
- 40
2314
+ 70
1120
2315
  I
1121
- 5e
2316
+ 81
1122
2317
  I
1123
- 41
2318
+ 71
1124
2319
  I
1125
- 76
2320
+ 98
1126
2321
  I
1127
- 44
2322
+ 0
1128
2323
  I
1129
- 80
2324
+ 99
2325
+ I
2326
+ 75
2327
+ I
2328
+ a3
1130
2329
  x
1131
2330
  49
1132
2331
  /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
1133
2332
  p
1134
- 0
2333
+ 1
2334
+ x
2335
+ 15
2336
+ started_message
1135
2337
  x
1136
2338
  3
1137
2339
  run
1138
2340
  p
1139
- 55
2341
+ 111
1140
2342
  I
1141
2343
  -1
1142
2344
  I
1143
- d
2345
+ 2c
1144
2346
  I
1145
2347
  0
1146
2348
  I
1147
- f
2349
+ 2e
1148
2350
  I
1149
2351
  1a
1150
2352
  I
1151
- 10
2353
+ 2f
1152
2354
  I
1153
2355
  2b
1154
2356
  I
1155
- 11
2357
+ 30
1156
2358
  I
1157
2359
  33
1158
2360
  I
1159
- f
2361
+ 2e
1160
2362
  I
1161
2363
  34
1162
2364
  I
@@ -1164,23 +2366,23 @@ I
1164
2366
  I
1165
2367
  35
1166
2368
  I
1167
- 14
2369
+ 33
1168
2370
  I
1169
2371
  4e
1170
2372
  I
1171
- 15
2373
+ 34
1172
2374
  I
1173
2375
  58
1174
2376
  I
1175
- 16
2377
+ 35
1176
2378
  I
1177
2379
  62
1178
2380
  I
1179
- 17
2381
+ 36
1180
2382
  I
1181
2383
  6a
1182
2384
  I
1183
- 14
2385
+ 33
1184
2386
  I
1185
2387
  6b
1186
2388
  I
@@ -1188,11 +2390,11 @@ I
1188
2390
  I
1189
2391
  6c
1190
2392
  I
1191
- 1a
2393
+ 39
1192
2394
  I
1193
2395
  78
1194
2396
  I
1195
- 1c
2397
+ 3b
1196
2398
  I
1197
2399
  95
1198
2400
  I
@@ -1200,7 +2402,7 @@ I
1200
2402
  I
1201
2403
  9c
1202
2404
  I
1203
- 1c
2405
+ 3b
1204
2406
  I
1205
2407
  ab
1206
2408
  I
@@ -1208,56 +2410,174 @@ I
1208
2410
  I
1209
2411
  ae
1210
2412
  I
1211
- 1c
2413
+ 3b
1212
2414
  I
1213
2415
  b1
1214
2416
  I
1215
- 1e
2417
+ 3d
1216
2418
  I
1217
2419
  bf
1218
2420
  I
1219
- 20
2421
+ 3e
2422
+ I
2423
+ d3
2424
+ I
2425
+ 3f
2426
+ I
2427
+ e1
2428
+ I
2429
+ 40
2430
+ I
2431
+ f5
2432
+ I
2433
+ 41
2434
+ I
2435
+ 103
2436
+ I
2437
+ 42
2438
+ I
2439
+ 117
2440
+ I
2441
+ 43
2442
+ I
2443
+ 12b
2444
+ I
2445
+ 44
1220
2446
  I
1221
- dd
2447
+ 135
2448
+ I
2449
+ 46
2450
+ I
2451
+ 147
1222
2452
  I
1223
2453
  0
1224
2454
  I
1225
- de
2455
+ 148
1226
2456
  I
1227
- 2b
2457
+ 49
2458
+ I
2459
+ 156
1228
2460
  I
1229
- e2
2461
+ 4b
1230
2462
  I
1231
- 2c
2463
+ 174
2464
+ I
2465
+ 0
1232
2466
  I
1233
- f0
2467
+ 175
1234
2468
  I
1235
- 2b
2469
+ 4d
2470
+ I
2471
+ 179
2472
+ I
2473
+ 4e
2474
+ I
2475
+ 187
1236
2476
  I
1237
- f1
2477
+ 4d
2478
+ I
2479
+ 188
1238
2480
  I
1239
2481
  0
1240
2482
  I
1241
- f2
2483
+ 189
1242
2484
  I
1243
- 2f
2485
+ 51
1244
2486
  I
1245
- f9
2487
+ 19b
1246
2488
  I
1247
- 30
2489
+ 56
2490
+ I
2491
+ 1a4
2492
+ I
2493
+ 57
2494
+ I
2495
+ 1b2
2496
+ I
2497
+ 0
2498
+ I
2499
+ 1b3
2500
+ I
2501
+ 58
2502
+ I
2503
+ 1ba
2504
+ I
2505
+ 59
2506
+ I
2507
+ 1c8
2508
+ I
2509
+ 0
2510
+ I
2511
+ 1c9
2512
+ I
2513
+ 5a
2514
+ I
2515
+ 1d3
2516
+ I
2517
+ 5b
2518
+ I
2519
+ 1e0
2520
+ I
2521
+ 5c
2522
+ I
2523
+ 1ed
2524
+ I
2525
+ 5e
2526
+ I
2527
+ 209
2528
+ I
2529
+ 0
2530
+ I
2531
+ 20e
2532
+ I
2533
+ 61
2534
+ I
2535
+ 21b
2536
+ I
2537
+ 63
2538
+ I
2539
+ 21c
2540
+ I
2541
+ 61
2542
+ I
2543
+ 21f
2544
+ I
2545
+ 62
2546
+ I
2547
+ 235
2548
+ I
2549
+ 0
2550
+ I
2551
+ 23a
2552
+ I
2553
+ 56
2554
+ I
2555
+ 23b
1248
2556
  I
1249
- 102
2557
+ 0
2558
+ I
2559
+ 23c
2560
+ I
2561
+ 66
2562
+ I
2563
+ 245
1250
2564
  x
1251
2565
  49
1252
2566
  /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
1253
2567
  p
1254
- 2
2568
+ 4
1255
2569
  x
1256
2570
  22
1257
2571
  show_no_config_warning
1258
2572
  x
1259
2573
  6
1260
2574
  config
2575
+ x
2576
+ 9
2577
+ databases
2578
+ x
2579
+ 1
2580
+ e
1261
2581
  p
1262
2582
  5
1263
2583
  I
@@ -1265,11 +2585,11 @@ I
1265
2585
  I
1266
2586
  9
1267
2587
  I
1268
- 1f
2588
+ 21
1269
2589
  I
1270
- d
2590
+ 2c
1271
2591
  I
1272
- 2a
2592
+ 2c
1273
2593
  x
1274
2594
  49
1275
2595
  /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb
@@ -1295,29 +2615,25 @@ x
1295
2615
  13
1296
2616
  attach_method
1297
2617
  p
1298
- 11
2618
+ 9
1299
2619
  I
1300
2620
  0
1301
2621
  I
1302
2622
  1
1303
2623
  I
1304
- 19
2624
+ 1b
1305
2625
  I
1306
2626
  2
1307
2627
  I
1308
- 22
1309
- I
1310
- 3
1311
- I
1312
- 2b
2628
+ 35
1313
2629
  I
1314
- 4
2630
+ 1
1315
2631
  I
1316
- 34
2632
+ 3b
1317
2633
  I
1318
2634
  6
1319
2635
  I
1320
- 51
2636
+ 58
1321
2637
  x
1322
2638
  49
1323
2639
  /Users/dturnbull/ruby/ruby-redis/lib/redis/bin.rb