jodosha-redis-rails 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.textile CHANGED
@@ -18,7 +18,8 @@ h2. How to use with Rails
18
18
 
19
19
  In your configuration files:
20
20
 
21
- config.gem "jodosha-redis-rails", :source => "http://gems.github.com"
21
+ config.gem "jodosha-redis-rails", :source => "http://gems.github.com", :lib => "redis-rails"
22
+ require "redis-rails" # HACK Rails tries to instantiate cache first, then load configured gems
22
23
  config.cache_store = :redis_store
23
24
 
24
25
  Start Redis server, then your application.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/testtask'
5
5
  require 'rake/rdoctask'
6
6
  require 'spec/rake/spectask'
7
7
 
8
- REDIS_RAILS_VERSION = "0.0.1"
8
+ REDIS_RAILS_VERSION = "0.0.2"
9
9
 
10
10
  task :default => :spec
11
11
 
@@ -26,4 +26,27 @@ desc 'Show the file list for the gemspec file'
26
26
  task :files do
27
27
  puts "Files:\n #{Dir['**/*'].reject {|f| File.directory?(f)}.sort.inspect}"
28
28
  puts "Test files:\n #{Dir['spec/**/*_spec.rb'].reject {|f| File.directory?(f)}.sort.inspect}"
29
- end
29
+ end
30
+
31
+ namespace :redis do
32
+ desc 'Start the Redis cluster'
33
+ task :start => :clean do
34
+ system "redis-server spec/config/single.conf"
35
+ system "redis-server spec/config/master.conf"
36
+ system "redis-server spec/config/slave.conf"
37
+ end
38
+
39
+ desc 'Stop the Redis cluster'
40
+ task :stop do
41
+ # TODO replace with:
42
+ # system "kill -9 `tmp/redis-single.pid`"
43
+ # system "kill -9 `tmp/redis-master.pid`"
44
+ # system "kill -9 `tmp/redis-slave.pid`"
45
+ system "ps -eo pid,comm | grep redis | xargs kill -9"
46
+ end
47
+
48
+ desc 'Clean the tmp/ directory'
49
+ task :clean do
50
+ system "rm tmp/*"
51
+ end
52
+ end
@@ -8,6 +8,7 @@ module ActiveSupport
8
8
  # RedisStore.new "example.com" # => host: example.com, port: 6379, db: 0
9
9
  # RedisStore.new "example.com:23682" # => host: example.com, port: 23682, db: 0
10
10
  # RedisStore.new "example.com:23682/1" # => host: example.com, port: 23682, db: 1
11
+ # RedisStore.new "localhost:6379/0", "localhost:6380/0" # => instantiate a cluster
11
12
  def initialize(*addresses)
12
13
  addresses = extract_addresses(addresses)
13
14
  @data = if addresses.size > 1
@@ -5,4 +5,6 @@ class DistributedMarshaledRedis < DistRedis
5
5
  end
6
6
  @ring = HashRing.new nodes
7
7
  end
8
+
9
+ alias_method :flush_db, :delete_cloud!
8
10
  end
data/redis-rails.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "redis-rails"
3
- s.version = "0.0.1"
4
- s.date = "2009-04-11"
3
+ s.version = "0.0.2"
4
+ s.date = "2009-04-16"
5
5
  s.summary = "Redis store for Rails"
6
6
  s.author = "Luca Guidi"
7
7
  s.email = "guidi.luca@gmail.com"
8
8
  s.homepage = "http://lucaguidi.com"
9
9
  s.description = "Redis store for Rails"
10
10
  s.has_rdoc = true
11
- s.files = ["MIT-LICENSE", "README.textile", "Rakefile", "lib/active_support/cache/redis_store.rb", "lib/redis-rails.rb", "lib/redis/distributed_marshaled_redis.rb", "lib/redis/marshaled_redis.rb", "redis-rails.gemspec", "spec/active_support/cache/redis_store_spec.rb", "spec/redis/distributed_marshaled_redis_spec.rb", "spec/redis/marshaled_redis_spec.rb", "spec/spec_helper.rb"]
11
+ s.files = ["MIT-LICENSE", "README.textile", "Rakefile", "lib/active_support/cache/redis_store.rb", "lib/redis-rails.rb", "lib/redis/distributed_marshaled_redis.rb", "lib/redis/marshaled_redis.rb", "redis-rails.gemspec", "spec/active_support/cache/redis_store_spec.rb", "spec/config/master.conf", "spec/config/single.conf", "spec/config/slave.conf", "spec/redis/distributed_marshaled_redis_spec.rb", "spec/redis/marshaled_redis_spec.rb", "spec/spec_helper.rb"]
12
12
  s.test_files = ["spec/active_support/cache/redis_store_spec.rb", "spec/redis/distributed_marshaled_redis_spec.rb", "spec/redis/marshaled_redis_spec.rb"]
13
13
  s.extra_rdoc_files = ["README.textile"]
14
14
  end
@@ -5,10 +5,13 @@ module ActiveSupport
5
5
  describe "RedisStore" do
6
6
  before(:each) do
7
7
  @store = RedisStore.new
8
+ @dstore = RedisStore.new "localhost:6380/1", "localhost:6381/1"
8
9
  @rabbit = OpenStruct.new :name => "bunny"
9
10
  @white_rabbit = OpenStruct.new :color => "white"
10
- @store.write "rabbit", @rabbit
11
- @store.delete "counter"
11
+ with_store_management do |store|
12
+ store.write "rabbit", @rabbit
13
+ store.delete "counter"
14
+ end
12
15
  end
13
16
 
14
17
  it "should accept connection params" do
@@ -38,12 +41,16 @@ module ActiveSupport
38
41
  end
39
42
 
40
43
  it "should read the data" do
41
- @store.read("rabbit").should === @rabbit
44
+ with_store_management do |store|
45
+ store.read("rabbit").should === @rabbit
46
+ end
42
47
  end
43
48
 
44
49
  it "should write the data" do
45
- @store.write "rabbit", @white_rabbit
46
- @store.read("rabbit").should === @white_rabbit
50
+ with_store_management do |store|
51
+ store.write "rabbit", @white_rabbit
52
+ store.read("rabbit").should === @white_rabbit
53
+ end
47
54
  end
48
55
 
49
56
  # it "should write the data with expiration time" do
@@ -53,80 +60,111 @@ module ActiveSupport
53
60
  # end
54
61
 
55
62
  it "should not write data if :unless_exist option is true" do
56
- @store.write "rabbit", @white_rabbit, :unless_exist => true
57
- @store.read("rabbit").should === @rabbit
63
+ with_store_management do |store|
64
+ store.write "rabbit", @white_rabbit, :unless_exist => true
65
+ store.read("rabbit").should === @rabbit
66
+ end
58
67
  end
59
68
 
60
69
  it "should read raw data" do
61
- @store.read("rabbit", :raw => true).should == "\004\bU:\017OpenStruct{\006:\tname\"\nbunny"
70
+ with_store_management do |store|
71
+ store.read("rabbit", :raw => true).should == "\004\bU:\017OpenStruct{\006:\tname\"\nbunny"
72
+ end
62
73
  end
63
74
 
64
75
  it "should write raw data" do
65
- @store.write "rabbit", @white_rabbit, :raw => true
66
- @store.read("rabbit", :raw => true).should == %(#<OpenStruct color="white">)
76
+ with_store_management do |store|
77
+ store.write "rabbit", @white_rabbit, :raw => true
78
+ store.read("rabbit", :raw => true).should == %(#<OpenStruct color="white">)
79
+ end
67
80
  end
68
81
 
69
82
  it "should delete data" do
70
- @store.delete "rabbit"
71
- @store.read("rabbit").should be_nil
83
+ with_store_management do |store|
84
+ store.delete "rabbit"
85
+ store.read("rabbit").should be_nil
86
+ end
72
87
  end
73
88
 
74
89
  it "should delete matched data" do
75
- @store.delete_matched "rabb*"
76
- @store.read("rabbit").should be_nil
90
+ with_store_management do |store|
91
+ store.delete_matched "rabb*"
92
+ store.read("rabbit").should be_nil
93
+ end
77
94
  end
78
95
 
79
96
  it "should verify existence of an object in the store" do
80
- @store.exist?("rabbit").should be_true
81
- @store.exist?("rab-a-dub").should be_false
97
+ with_store_management do |store|
98
+ store.exist?("rabbit").should be_true
99
+ store.exist?("rab-a-dub").should be_false
100
+ end
82
101
  end
83
102
 
84
103
  it "should increment a key" do
85
- 3.times { @store.increment "counter" }
86
- @store.read("counter", :raw => true).to_i.should == 3
104
+ with_store_management do |store|
105
+ 3.times { store.increment "counter" }
106
+ store.read("counter", :raw => true).to_i.should == 3
107
+ end
87
108
  end
88
109
 
89
110
  it "should decrement a key" do
90
- 3.times { @store.increment "counter" }
91
- 2.times { @store.decrement "counter" }
92
- @store.read("counter", :raw => true).to_i.should == 1
111
+ with_store_management do |store|
112
+ 3.times { store.increment "counter" }
113
+ 2.times { store.decrement "counter" }
114
+ store.read("counter", :raw => true).to_i.should == 1
115
+ end
93
116
  end
94
117
 
95
118
  it "should increment a key by given value" do
96
- @store.increment "counter", 3
97
- @store.read("counter", :raw => true).to_i.should == 3
119
+ with_store_management do |store|
120
+ store.increment "counter", 3
121
+ store.read("counter", :raw => true).to_i.should == 3
122
+ end
98
123
  end
99
124
 
100
125
  it "should decrement a key by given value" do
101
- 3.times { @store.increment "counter" }
102
- @store.decrement "counter", 2
103
- @store.read("counter", :raw => true).to_i.should == 1
126
+ with_store_management do |store|
127
+ 3.times { store.increment "counter" }
128
+ store.decrement "counter", 2
129
+ store.read("counter", :raw => true).to_i.should == 1
130
+ end
104
131
  end
105
132
 
106
133
  it "should clear the store" do
107
- @store.clear
108
- @store.instance_variable_get(:@data).keys("*").should be_empty
134
+ with_store_management do |store|
135
+ store.clear
136
+ store.instance_variable_get(:@data).keys("*").should be_empty
137
+ end
109
138
  end
110
139
 
111
140
  it "should return store stats" do
112
- @store.stats.should_not be_empty
113
- end
114
-
115
- # it "should fetch data" do
116
- # @store.fetch("rabbit").should == @rabbit
117
- # @store.fetch("rab-a-dab").should be_nil
118
- # @store.fetch("rab-a-dab") { "Flora de Cana" }
119
- # @store.fetch("rab-a-dab").should === "Flora de Cana"
120
- # @store.fetch("rabbit", :force => true).should be_nil # force cache miss
121
- # @store.fetch("rabbit", :force => true, :expires_in => 1.second) { @white_rabbit }
122
- # @store.fetch("rabbit").should === @white_rabbit ; sleep 2
123
- # @store.fetch("rabbit").should be_nil
124
- # end
141
+ with_store_management do |store|
142
+ store.stats.should_not be_empty
143
+ end
144
+ end
145
+
146
+ it "should fetch data" do
147
+ with_store_management do |store|
148
+ store.fetch("rabbit").should == @rabbit
149
+ store.fetch("rub-a-dub").should be_nil
150
+ store.fetch("rub-a-dub") { "Flora de Cana" }
151
+ store.fetch("rub-a-dub").should === "Flora de Cana"
152
+ store.fetch("rabbit", :force => true).should be_nil # force cache miss
153
+ # store.fetch("rabbit", :force => true, :expires_in => 1.second) { @white_rabbit }
154
+ # store.fetch("rabbit").should === @white_rabbit ; sleep 2
155
+ # store.fetch("rabbit").should be_nil
156
+ end
157
+ end
125
158
 
126
159
  private
127
160
  def instantiate_store(address = nil)
128
161
  RedisStore.new(address).instance_variable_get(:@data)
129
162
  end
163
+
164
+ def with_store_management
165
+ yield @store
166
+ yield @dstore
167
+ end
130
168
  end
131
169
  end
132
170
  end
@@ -0,0 +1,87 @@
1
+ # Redis configuration file example
2
+
3
+ # By default Redis does not run as a daemon. Use 'yes' if you need it.
4
+ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
5
+ daemonize yes
6
+
7
+ # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
8
+ # You can specify a custom pid file location here.
9
+ pidfile ./tmp/redis-master.pid
10
+
11
+ # Accept connections on the specified port, default is 6379
12
+ port 6380
13
+
14
+ # If you want you can bind a single interface, if the bind option is not
15
+ # specified all the interfaces will listen for connections.
16
+ #
17
+ # bind 127.0.0.1
18
+
19
+ # Close the connection after a client is idle for N seconds
20
+ timeout 300
21
+
22
+ # Save the DB on disk:
23
+ #
24
+ # save <seconds> <changes>
25
+ #
26
+ # Will save the DB if both the given number of seconds and the given
27
+ # number of write operations against the DB occurred.
28
+ #
29
+ # In the example below the behaviour will be to save:
30
+ # after 900 sec (15 min) if at least 1 key changed
31
+ # after 300 sec (5 min) if at least 10 keys changed
32
+ # after 60 sec if at least 10000 keys changed
33
+ save 900 1
34
+ save 300 10
35
+ save 60 10000
36
+
37
+ # For default save/load DB in/from the working directory
38
+ # Note that you must specify a directory not a file name.
39
+ dir ./tmp
40
+
41
+ # Set server verbosity to 'debug'
42
+ # it can be one of:
43
+ # debug (a lot of information, useful for development/testing)
44
+ # notice (moderately verbose, what you want in production probably)
45
+ # warning (only very important / critical messages are logged)
46
+ loglevel debug
47
+
48
+ # Specify the log file name. Also 'stdout' can be used to force
49
+ # the demon to log on the standard output. Note that if you use standard
50
+ # output for logging but daemonize, logs will be sent to /dev/null
51
+ logfile stdout
52
+
53
+ # Set the number of databases.
54
+ databases 16
55
+
56
+ ################################# REPLICATION #################################
57
+
58
+ # Master-Slave replication. Use slaveof to make a Redis instance a copy of
59
+ # another Redis server. Note that the configuration is local to the slave
60
+ # so for example it is possible to configure the slave to save the DB with a
61
+ # different interval, or to listen to another port, and so on.
62
+
63
+ # slaveof <masterip> <masterport>
64
+
65
+ ################################## SECURITY ###################################
66
+
67
+ # Require clients to issue AUTH <PASSWORD> before processing any other
68
+ # commands. This might be useful in environments in which you do not trust
69
+ # others with access to the host running redis-server.
70
+ #
71
+ # This should stay commented out for backward compatibility and because most
72
+ # people do not need auth (e.g. they run their own servers).
73
+
74
+ # requirepass foobared
75
+
76
+ ############################### ADVANCED CONFIG ###############################
77
+
78
+ # Glue small output buffers together in order to send small replies in a
79
+ # single TCP packet. Uses a bit more CPU but most of the times it is a win
80
+ # in terms of number of queries per second. Use 'yes' if unsure.
81
+ glueoutputbuf yes
82
+
83
+ # Use object sharing. Can save a lot of memory if you have many common
84
+ # string in your dataset, but performs lookups against the shared objects
85
+ # pool so it uses more CPU and can be a bit slower. Usually it's a good
86
+ # idea.
87
+ shareobjects no
@@ -0,0 +1,87 @@
1
+ # Redis configuration file example
2
+
3
+ # By default Redis does not run as a daemon. Use 'yes' if you need it.
4
+ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
5
+ daemonize yes
6
+
7
+ # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
8
+ # You can specify a custom pid file location here.
9
+ pidfile ./tmp/redis-single.pid
10
+
11
+ # Accept connections on the specified port, default is 6379
12
+ port 6379
13
+
14
+ # If you want you can bind a single interface, if the bind option is not
15
+ # specified all the interfaces will listen for connections.
16
+ #
17
+ # bind 127.0.0.1
18
+
19
+ # Close the connection after a client is idle for N seconds
20
+ timeout 300
21
+
22
+ # Save the DB on disk:
23
+ #
24
+ # save <seconds> <changes>
25
+ #
26
+ # Will save the DB if both the given number of seconds and the given
27
+ # number of write operations against the DB occurred.
28
+ #
29
+ # In the example below the behaviour will be to save:
30
+ # after 900 sec (15 min) if at least 1 key changed
31
+ # after 300 sec (5 min) if at least 10 keys changed
32
+ # after 60 sec if at least 10000 keys changed
33
+ save 900 1
34
+ save 300 10
35
+ save 60 10000
36
+
37
+ # For default save/load DB in/from the working directory
38
+ # Note that you must specify a directory not a file name.
39
+ dir ./tmp
40
+
41
+ # Set server verbosity to 'debug'
42
+ # it can be one of:
43
+ # debug (a lot of information, useful for development/testing)
44
+ # notice (moderately verbose, what you want in production probably)
45
+ # warning (only very important / critical messages are logged)
46
+ loglevel debug
47
+
48
+ # Specify the log file name. Also 'stdout' can be used to force
49
+ # the demon to log on the standard output. Note that if you use standard
50
+ # output for logging but daemonize, logs will be sent to /dev/null
51
+ logfile stdout
52
+
53
+ # Set the number of databases.
54
+ databases 16
55
+
56
+ ################################# REPLICATION #################################
57
+
58
+ # Master-Slave replication. Use slaveof to make a Redis instance a copy of
59
+ # another Redis server. Note that the configuration is local to the slave
60
+ # so for example it is possible to configure the slave to save the DB with a
61
+ # different interval, or to listen to another port, and so on.
62
+
63
+ # slaveof <masterip> <masterport>
64
+
65
+ ################################## SECURITY ###################################
66
+
67
+ # Require clients to issue AUTH <PASSWORD> before processing any other
68
+ # commands. This might be useful in environments in which you do not trust
69
+ # others with access to the host running redis-server.
70
+ #
71
+ # This should stay commented out for backward compatibility and because most
72
+ # people do not need auth (e.g. they run their own servers).
73
+
74
+ # requirepass foobared
75
+
76
+ ############################### ADVANCED CONFIG ###############################
77
+
78
+ # Glue small output buffers together in order to send small replies in a
79
+ # single TCP packet. Uses a bit more CPU but most of the times it is a win
80
+ # in terms of number of queries per second. Use 'yes' if unsure.
81
+ glueoutputbuf yes
82
+
83
+ # Use object sharing. Can save a lot of memory if you have many common
84
+ # string in your dataset, but performs lookups against the shared objects
85
+ # pool so it uses more CPU and can be a bit slower. Usually it's a good
86
+ # idea.
87
+ shareobjects no
@@ -0,0 +1,87 @@
1
+ # Redis configuration file example
2
+
3
+ # By default Redis does not run as a daemon. Use 'yes' if you need it.
4
+ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
5
+ daemonize yes
6
+
7
+ # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
8
+ # You can specify a custom pid file location here.
9
+ pidfile ./tmp/redis-slave.pid
10
+
11
+ # Accept connections on the specified port, default is 6379
12
+ port 6381
13
+
14
+ # If you want you can bind a single interface, if the bind option is not
15
+ # specified all the interfaces will listen for connections.
16
+ #
17
+ # bind 127.0.0.1
18
+
19
+ # Close the connection after a client is idle for N seconds
20
+ timeout 300
21
+
22
+ # Save the DB on disk:
23
+ #
24
+ # save <seconds> <changes>
25
+ #
26
+ # Will save the DB if both the given number of seconds and the given
27
+ # number of write operations against the DB occurred.
28
+ #
29
+ # In the example below the behaviour will be to save:
30
+ # after 900 sec (15 min) if at least 1 key changed
31
+ # after 300 sec (5 min) if at least 10 keys changed
32
+ # after 60 sec if at least 10000 keys changed
33
+ save 900 1
34
+ save 300 10
35
+ save 60 10000
36
+
37
+ # For default save/load DB in/from the working directory
38
+ # Note that you must specify a directory not a file name.
39
+ dir ./tmp
40
+
41
+ # Set server verbosity to 'debug'
42
+ # it can be one of:
43
+ # debug (a lot of information, useful for development/testing)
44
+ # notice (moderately verbose, what you want in production probably)
45
+ # warning (only very important / critical messages are logged)
46
+ loglevel debug
47
+
48
+ # Specify the log file name. Also 'stdout' can be used to force
49
+ # the demon to log on the standard output. Note that if you use standard
50
+ # output for logging but daemonize, logs will be sent to /dev/null
51
+ logfile stdout
52
+
53
+ # Set the number of databases.
54
+ databases 16
55
+
56
+ ################################# REPLICATION #################################
57
+
58
+ # Master-Slave replication. Use slaveof to make a Redis instance a copy of
59
+ # another Redis server. Note that the configuration is local to the slave
60
+ # so for example it is possible to configure the slave to save the DB with a
61
+ # different interval, or to listen to another port, and so on.
62
+
63
+ # slaveof 127.0.0.1 6380
64
+
65
+ ################################## SECURITY ###################################
66
+
67
+ # Require clients to issue AUTH <PASSWORD> before processing any other
68
+ # commands. This might be useful in environments in which you do not trust
69
+ # others with access to the host running redis-server.
70
+ #
71
+ # This should stay commented out for backward compatibility and because most
72
+ # people do not need auth (e.g. they run their own servers).
73
+
74
+ # requirepass foobared
75
+
76
+ ############################### ADVANCED CONFIG ###############################
77
+
78
+ # Glue small output buffers together in order to send small replies in a
79
+ # single TCP packet. Uses a bit more CPU but most of the times it is a win
80
+ # in terms of number of queries per second. Use 'yes' if unsure.
81
+ glueoutputbuf yes
82
+
83
+ # Use object sharing. Can save a lot of memory if you have many common
84
+ # string in your dataset, but performs lookups against the shared objects
85
+ # pool so it uses more CPU and can be a bit slower. Usually it's a good
86
+ # idea.
87
+ shareobjects no
@@ -2,7 +2,10 @@ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
2
 
3
3
  describe "DistributedMarshaledRedis" do
4
4
  before(:each) do
5
- @dmr = DistributedMarshaledRedis.new [{:db => 0}, {:db => 1}]
5
+ @dmr = DistributedMarshaledRedis.new [
6
+ {:host => "localhost", :port => "6380", :db => 0},
7
+ {:host => "localhost", :port => "6381", :db => 0}
8
+ ]
6
9
  @rabbit = OpenStruct.new :name => "bunny"
7
10
  @white_rabbit = OpenStruct.new :color => "white"
8
11
  @dmr.set "rabbit", @rabbit
@@ -13,11 +16,11 @@ describe "DistributedMarshaledRedis" do
13
16
  end
14
17
 
15
18
  it "should accept connection params" do
16
- dmr = DistributedMarshaledRedis.new [ :host => "redis.com", :port => "3680", :db => 1 ]
19
+ dmr = DistributedMarshaledRedis.new [ :host => "redis.com", :port => "6380", :db => 1 ]
17
20
  dmr.ring.should have(1).node
18
21
  mr = dmr.ring.nodes.first
19
22
  mr.host.should == "redis.com"
20
- mr.port.should == "3680"
23
+ mr.port.should == "6380"
21
24
  mr.instance_variable_get(:@db).should == 1
22
25
  end
23
26
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jodosha-redis-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-11 00:00:00 -07:00
12
+ date: 2009-04-16 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -31,6 +31,9 @@ files:
31
31
  - lib/redis/marshaled_redis.rb
32
32
  - redis-rails.gemspec
33
33
  - spec/active_support/cache/redis_store_spec.rb
34
+ - spec/config/master.conf
35
+ - spec/config/single.conf
36
+ - spec/config/slave.conf
34
37
  - spec/redis/distributed_marshaled_redis_spec.rb
35
38
  - spec/redis/marshaled_redis_spec.rb
36
39
  - spec/spec_helper.rb