redis-spawn 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.md +183 -0
- data/lib/redis/spawn/version.rb +1 -1
- data/lib/redis/spawn.rb +31 -9
- metadata +4 -4
- data/README +0 -8
data/README.md
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
redis-spawn
|
2
|
+
===========
|
3
|
+
|
4
|
+
An extension to redis-rb to facilitate spawning a redis-server specifically
|
5
|
+
for your app.
|
6
|
+
|
7
|
+
Why?
|
8
|
+
----
|
9
|
+
|
10
|
+
Redis focuses on providing its services to a single application at a time,
|
11
|
+
and is geared towards providing scalability for whatever application you are
|
12
|
+
using it for. It doesn't really expect you to try and use a single server
|
13
|
+
instance and dataset for more than one application at a time: there is only
|
14
|
+
very limited access control for the whole server, and no real way of
|
15
|
+
partitioning the keyspace (you can namespace, but you can't access control a
|
16
|
+
namespace or any specific subset of keys). One solution is to run a server
|
17
|
+
instance for each application and dataset you want to use. The goal of
|
18
|
+
redis-spawn is to allow you to manage your own redis-server instances from
|
19
|
+
within your Ruby application.
|
20
|
+
|
21
|
+
Usage
|
22
|
+
-----
|
23
|
+
|
24
|
+
To start a server with default options, simply create a new
|
25
|
+
Redis::SpawnServer instance:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
require 'redis/spawn'
|
29
|
+
|
30
|
+
my_server_instance = Redis::SpawnServer.new
|
31
|
+
my_server_instance.pid
|
32
|
+
=> 7459
|
33
|
+
```
|
34
|
+
|
35
|
+
When a Redis::SpawnServer instance is created, the initialize method sets up
|
36
|
+
the options for the server, and then starts it (this can be overridden - see
|
37
|
+
below). You should then be able to see the server in your process list:
|
38
|
+
|
39
|
+
```sh
|
40
|
+
$ ps -fp 7459
|
41
|
+
PID TTY STAT TIME COMMAND
|
42
|
+
7459 pts/4 S+ 0:00 redis-server /tmp/redis-spawned.7457.config
|
43
|
+
```
|
44
|
+
|
45
|
+
### Default Options
|
46
|
+
|
47
|
+
When starting a server with default options, redis-spawn will create a Redis
|
48
|
+
config file named `/tmp/redis-spawned.[pid of parent process].config`, and
|
49
|
+
populate it with the default server options. For the most part, these
|
50
|
+
defaults correspond to the defaults you expect to find in a vanilla
|
51
|
+
`redis.conf`, with a few notable exceptions:
|
52
|
+
|
53
|
+
* `dir` defaults to `/tmp/redis-spawned.[ppid].data`
|
54
|
+
* `logfile` defaults to `"/tmp/redis-spawned.[ppid].log`
|
55
|
+
* `unixsocket` defaults to `/tmp/redis-spawned.[ppid].sock`
|
56
|
+
* `port` defaults to `0`
|
57
|
+
* `bind` defaults to `127.0.0.1`
|
58
|
+
* `daemonize` is not set (i.e. server won't daemonize)
|
59
|
+
|
60
|
+
In all cases, [ppid] corresponds to the PID of the Ruby process that spawns
|
61
|
+
the server.
|
62
|
+
|
63
|
+
### Connecting
|
64
|
+
|
65
|
+
By defaults, spawned servers use unix domain sockets, and don't bind to a
|
66
|
+
network port. Continuing the above example you can connect as follows:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
redis = Redis.new(:path => my_server_instance.socket)
|
70
|
+
```
|
71
|
+
|
72
|
+
Or from the command line:
|
73
|
+
|
74
|
+
```sh
|
75
|
+
$ redis-cli -s /tmp/redis-spawned.7457.sock
|
76
|
+
```
|
77
|
+
|
78
|
+
### Shutdown and Cleanup
|
79
|
+
|
80
|
+
Spawned servers will automatically shutdown when your program exits. You can
|
81
|
+
also manually shut down:
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
my_server_instance.shutdown
|
85
|
+
=> 1
|
86
|
+
my_server_instance.pid
|
87
|
+
=> nil
|
88
|
+
```
|
89
|
+
|
90
|
+
By default, redis-spawn will cleanup the socket, log, and config files that
|
91
|
+
were automatically created. The data directory is not removed: you will
|
92
|
+
need to clean this up yourself if you don't need it (@todo support data dir
|
93
|
+
removal).
|
94
|
+
|
95
|
+
### Server Options
|
96
|
+
|
97
|
+
You can set :server_opts parameter when initializing to control server
|
98
|
+
configuration options. The value of this parameter should be a hash of Redis
|
99
|
+
config key/value pairs:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
my_server_opts = {:port => 6379, :bind => 192.168.0.1}
|
103
|
+
my_net_server = Redis::SpawnServer.new(:server_opts => my_server_opts)
|
104
|
+
```
|
105
|
+
|
106
|
+
:server_opts keys are Ruby symbols corresponding to names of Redis config
|
107
|
+
keys. Underscores in symbol names get translated to dashes in the config
|
108
|
+
file e.g. :hash_max_zipmap_value corresponds to hash-max-zipmap-value.
|
109
|
+
|
110
|
+
Values are expected to be strings or supply strings via #to_s in the usual
|
111
|
+
way. There is one exception: if the value is an array, the configuration
|
112
|
+
line will be written multiple times, once for each value of the string. For
|
113
|
+
example:
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
:save => ["900 1", "300 10", "60 10000"]
|
117
|
+
```
|
118
|
+
|
119
|
+
becomes
|
120
|
+
|
121
|
+
```
|
122
|
+
save 900 1
|
123
|
+
save 300 10
|
124
|
+
save 60 10000
|
125
|
+
```
|
126
|
+
|
127
|
+
### Other options
|
128
|
+
|
129
|
+
There are several options which you can pass to Redis::SpawnServer.new,
|
130
|
+
which are as follows:
|
131
|
+
|
132
|
+
#### `:generated_config_file`
|
133
|
+
|
134
|
+
This allows you to override the name/path of the autogenerated config file.
|
135
|
+
|
136
|
+
#### `:config_file`
|
137
|
+
|
138
|
+
Allows you to supply your own pre-existing config file. If you pass this
|
139
|
+
parameter, redis-spawn will not generate a config file and won't attempt to
|
140
|
+
clean up any files on shutdown.
|
141
|
+
|
142
|
+
#### `:cleanup_files`
|
143
|
+
|
144
|
+
This controls which files get automatically cleaned up when the server is
|
145
|
+
shut down. When setting this parameter, pass an array of symbols
|
146
|
+
corresponding to the files you want cleaning up:
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
:cleanup_files => [:socket, :config]
|
150
|
+
```
|
151
|
+
|
152
|
+
The default for this parameter is `[:socket, :log, :config]`, unless the
|
153
|
+
the `:config_file` parameter is set, in which case the default is to not
|
154
|
+
clean up any files unless `:cleanup_files` is set explicitly.
|
155
|
+
|
156
|
+
At present, there is no built in mechanism for cleaning up the data directory
|
157
|
+
- you will always need to do this manually.
|
158
|
+
|
159
|
+
#### `:start`
|
160
|
+
|
161
|
+
This allows you to prevent the server from automatically being started, e.g.
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
# Don't want to start striaght away
|
165
|
+
my_server = Redis::SpawnServer(:start => false)
|
166
|
+
# ...
|
167
|
+
# Now we're ready to start
|
168
|
+
my_server.start
|
169
|
+
```
|
170
|
+
|
171
|
+
Contact and Contributing
|
172
|
+
------------------------
|
173
|
+
|
174
|
+
The homepage for this project is
|
175
|
+
|
176
|
+
http://github.com/LichP/redis-spawn
|
177
|
+
|
178
|
+
Any feedback, suggestions, etc are very welcome. If you have bugfixes and/or
|
179
|
+
contributions, feel free to fork, branch, and send a pull request.
|
180
|
+
|
181
|
+
Enjoy :-)
|
182
|
+
|
183
|
+
Phil Stewart, October 2011
|
data/lib/redis/spawn/version.rb
CHANGED
data/lib/redis/spawn.rb
CHANGED
@@ -70,7 +70,7 @@ class Redis
|
|
70
70
|
@opts = default_opts.merge(supplied_opts)
|
71
71
|
self.server_opts = opts[:server_opts]
|
72
72
|
|
73
|
-
|
73
|
+
opts[:start] ? self.start : 0
|
74
74
|
|
75
75
|
# Return the instance
|
76
76
|
self
|
@@ -114,21 +114,39 @@ class Redis
|
|
114
114
|
end
|
115
115
|
|
116
116
|
# Start the server
|
117
|
-
pid = fork { exec("redis-server #{@config_file}") }
|
117
|
+
@pid = fork { exec("redis-server #{@config_file}") }
|
118
118
|
#logger.info("Spawned redis server with PID #{pid}")
|
119
119
|
|
120
120
|
at_exit do
|
121
|
-
|
122
|
-
|
123
|
-
rescue Errno::ESRCH
|
124
|
-
# Already dead - do nothing
|
125
|
-
end
|
126
|
-
self.cleanup_files
|
121
|
+
# Maybe make this configurable to allow the server to continue after exit
|
122
|
+
self.shutdown!
|
127
123
|
end
|
128
124
|
|
129
|
-
pid
|
125
|
+
self.pid
|
126
|
+
end
|
127
|
+
|
128
|
+
def started?
|
129
|
+
self.pid ? true : false
|
130
|
+
end
|
131
|
+
|
132
|
+
def shutdown
|
133
|
+
if self.started?
|
134
|
+
self.shutdown!
|
135
|
+
else
|
136
|
+
nil
|
137
|
+
end
|
130
138
|
end
|
131
139
|
|
140
|
+
def shutdown!
|
141
|
+
Process.kill("TERM", self.pid)
|
142
|
+
rescue Errno::ESRCH
|
143
|
+
# Already dead - do nothing
|
144
|
+
nil
|
145
|
+
ensure
|
146
|
+
@pid = nil
|
147
|
+
self.cleanup_files
|
148
|
+
end
|
149
|
+
|
132
150
|
# Attribute write for server opts: merges supplied opts with defaults
|
133
151
|
# to create fully populated server opts
|
134
152
|
#
|
@@ -187,5 +205,9 @@ class Redis
|
|
187
205
|
end
|
188
206
|
end
|
189
207
|
|
208
|
+
def socket
|
209
|
+
self.server_opts[:unixsocket]
|
210
|
+
end
|
211
|
+
|
190
212
|
end
|
191
213
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Phil Stewart
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-10-
|
17
|
+
date: 2011-10-29 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -57,7 +57,7 @@ extra_rdoc_files: []
|
|
57
57
|
files:
|
58
58
|
- lib/redis/spawn/version.rb
|
59
59
|
- lib/redis/spawn.rb
|
60
|
-
- README
|
60
|
+
- README.md
|
61
61
|
- LICENSE
|
62
62
|
- Rakefile
|
63
63
|
- test/write_config_test.rb
|