redis-dump 0.1.2 → 0.1.3

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.
data/CHANGES.txt CHANGED
@@ -1,5 +1,10 @@
1
1
  REDIS-DUMP, CHANGES
2
2
 
3
+ #### 0.1.3 (2010-11-16) ###############################
4
+
5
+ * ADDED: Support for dumping a specific subset of keys
6
+ * CHANGE: Now dependent on uri-redis 0.4+
7
+
3
8
  #### 0.1.2 (2010-11-15) ###############################
4
9
 
5
10
  * ADDED: redis-report
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  config = YAML.load_file("VERSION.yml")
13
13
  task :default => ["build"]
14
- CLEAN.include [ 'pkg', 'doc' ]
14
+ CLEAN.include [ 'pkg', 'doc', '*gemspec' ]
15
15
  name = "redis-dump"
16
16
 
17
17
  begin
@@ -27,6 +27,7 @@ begin
27
27
  gem.authors = ["Delano Mandelbaum"]
28
28
  gem.add_dependency("yajl-ruby", ">= 0.1")
29
29
  gem.add_dependency("redis", ">= 2.0")
30
+ gem.add_dependency("uri-redis", ">= 0.4.0")
30
31
  end
31
32
  Jeweler::GemcutterTasks.new
32
33
  rescue LoadError
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :MAJOR: 0
3
3
  :MINOR: 1
4
- :PATCH: 2
4
+ :PATCH: 3
5
5
  :BUILD: '001'
data/lib/redis/dump.rb CHANGED
@@ -3,6 +3,7 @@ unless defined?(RD_HOME)
3
3
  end
4
4
 
5
5
  require 'redis'
6
+ require 'uri/redis'
6
7
  require 'yajl'
7
8
 
8
9
  class Redis
@@ -43,20 +44,39 @@ class Redis
43
44
  self.class.ld 'CONNECT: ' << this_uri
44
45
  Redis.connect :url => this_uri
45
46
  end
46
- def each_key &blk
47
- @redis_connections.keys.sort.each do |redis_uri|
48
- self.class.ld ['---', "DB: #{redis_connections[redis_uri].client.db}", '---'].join($/)
49
- keys = redis_connections[redis_uri].keys
47
+
48
+ # Calls blk for each key. If keys is nil, this will iterate over
49
+ # every key in every open redis connection.
50
+ # * keys (Array, optional). If keys is provided it must contain URI::Redis objects.
51
+ def each_key(keys=nil, &blk)
52
+ if keys.nil?
53
+ @redis_connections.keys.sort.each do |redis_uri|
54
+ self.class.ld ['---', "DB: #{redis_connections[redis_uri].client.db}", '---'].join($/)
55
+ keys = redis_connections[redis_uri].keys
56
+ keys.each do |key|
57
+ blk.call redis_connections[redis_uri], key
58
+ end
59
+ end
60
+ else
50
61
  keys.each do |key|
51
- blk.call redis_connections[redis_uri], key
62
+ unless URI::Redis === key
63
+ raise Redis::Dump::Problem, "#{key} must be a URI::Redis object"
64
+ end
65
+ redis_uri = key.serverid
66
+ if redis_connections[redis_uri].nil?
67
+ raise Redis::Dump::Problem, "Not connected to #{redis_uri}"
68
+ end
69
+ blk.call redis_connections[redis_uri], key.key
52
70
  end
53
71
  end
54
72
  end
55
- def dump(&each_record)
73
+
74
+ # See each_key
75
+ def dump(keys=nil, &each_record)
56
76
  values = []
57
- each_key do |this_redis,key|
77
+ each_key(keys) do |this_redis,key|
58
78
  info = Redis::Dump.dump this_redis, key
59
- #self.class.ld " #{key} (#{info[:type]}): #{info[:size].to_bytes}"
79
+ self.class.ld " #{key} (#{info['type']}): #{info['size'].to_bytes}"
60
80
  encoded = self.class.encoder.encode info
61
81
  each_record.nil? ? (values << encoded) : each_record.call(encoded)
62
82
  end
@@ -66,7 +86,7 @@ class Redis
66
86
  values = []
67
87
  each_key do |this_redis,key|
68
88
  info = Redis::Dump.report this_redis, key
69
- #self.class.ld " #{key} (#{info[:type]}): #{info[:size].to_bytes}"
89
+ self.class.ld " #{key} (#{info['type']}): #{info['size'].to_bytes}"
70
90
  each_record.nil? ? (values << info) : each_record.call(info)
71
91
  end
72
92
  values
@@ -1,5 +1,8 @@
1
1
  require 'redis/dump'
2
2
 
3
+ # The test instance of redis must be running:
4
+ # $ redis-server try/redis-server.conf
5
+
3
6
  @uri_base = "redis://127.0.0.1:6371"
4
7
 
5
8
  Redis::Dump.debug = false
@@ -0,0 +1,43 @@
1
+ require 'redis/dump'
2
+
3
+ # The test instance of redis must be running:
4
+ # $ redis-server try/redis-server.conf
5
+
6
+ @uri_base = "redis://127.0.0.1:6371"
7
+
8
+ Redis::Dump.debug = false
9
+ Redis::Dump.safe = true
10
+
11
+ ## Connect to DB
12
+ @rdump = Redis::Dump.new 0..1, @uri_base
13
+ @rdump.redis_connections.size
14
+ #=> 2
15
+
16
+ ## Populate
17
+ 3.times { |idx| @rdump.redis(0).set "gloria:#{idx}", "gloria_value[#{idx}]" } # yp.ca
18
+ 4.times { |idx| @rdump.redis(0).set "pamela:#{idx}", "pamela_value[#{idx}]" } # soap web service
19
+ 2.times { |idx| @rdump.redis(1).set "nikola:#{idx}", "nikola_value[#{idx}]" } # m.yp.ca log analyzer
20
+ [@rdump.redis(0).keys.size, @rdump.redis(1).keys.size]
21
+ #=> [7, 2]
22
+
23
+ ## Generate a list of keys
24
+ @keys = @rdump.redis(0).keys('*gloria*').collect { |key| URI.parse "#{@uri_base}/0/#{key}" }
25
+ @keys.push *@rdump.redis(1).keys('*nikola*').collect { |key| URI.parse "#{@uri_base}/1/#{key}" }
26
+ @keys.size
27
+ #=> 5
28
+
29
+ ## Dump these specific keys
30
+ @rdump.dump(@keys).sort
31
+ #=> ['{"db":0,"key":"gloria:0","ttl":-1,"type":"string","value":"gloria_value[0]","size":15}','{"db":0,"key":"gloria:1","ttl":-1,"type":"string","value":"gloria_value[1]","size":15}','{"db":0,"key":"gloria:2","ttl":-1,"type":"string","value":"gloria_value[2]","size":15}','{"db":1,"key":"nikola:0","ttl":-1,"type":"string","value":"nikola_value[0]","size":15}', '{"db":1,"key":"nikola:1","ttl":-1,"type":"string","value":"nikola_value[1]","size":15}']
32
+
33
+
34
+ ## Dump none existent keys
35
+ unknown_keys = [URI.parse("#{@uri_base}/0/unknownkey1"), URI.parse("#{@uri_base}/1/unknownkey2")]
36
+ @rdump.dump(unknown_keys).sort
37
+ #=> ['{"db":0,"key":"unknownkey1","ttl":-1,"type":"none","value":"","size":0}', '{"db":1,"key":"unknownkey2","ttl":-1,"type":"none","value":"","size":0}']
38
+
39
+
40
+ Redis::Dump.safe = true
41
+ db0 = Redis::Dump.new 0..1, @uri_base
42
+ db0.redis(0).flushdb
43
+ db0.redis(1).flushdb
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-dump
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Delano Mandelbaum
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-15 00:00:00 -05:00
18
+ date: 2010-11-16 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -48,6 +48,22 @@ dependencies:
48
48
  version: "2.0"
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: uri-redis
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 15
60
+ segments:
61
+ - 0
62
+ - 4
63
+ - 0
64
+ version: 0.4.0
65
+ type: :runtime
66
+ version_requirements: *id003
51
67
  description: Backup and restore your Redis data to and from JSON.
52
68
  email: delano@solutious.com
53
69
  executables:
@@ -70,6 +86,7 @@ files:
70
86
  - bin/redis-report
71
87
  - lib/redis/dump.rb
72
88
  - try/10_redis_dump_try.rb
89
+ - try/20_dump_specific_keys_try.rb
73
90
  - try/db0.json
74
91
  - try/redis-server.conf
75
92
  has_rdoc: true