redis 0.1.1 → 0.1.2
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/Rakefile +2 -2
- data/lib/dist_redis.rb +25 -0
- data/lib/hash_ring.rb +7 -0
- data/lib/redis.rb +11 -8
- data/spec/redis_spec.rb +33 -2
- metadata +3 -3
data/Rakefile
CHANGED
|
@@ -8,7 +8,7 @@ require 'tasks/redis.tasks'
|
|
|
8
8
|
|
|
9
9
|
GEM = 'redis'
|
|
10
10
|
GEM_NAME = 'redis'
|
|
11
|
-
GEM_VERSION = '0.1.
|
|
11
|
+
GEM_VERSION = '0.1.2'
|
|
12
12
|
AUTHORS = ['Ezra Zygmuntowicz', 'Taylor Weibley', 'Matthew Clark', 'Brian McKinney', 'Salvatore Sanfilippo', 'Luca Guidi']
|
|
13
13
|
EMAIL = "ez@engineyard.com"
|
|
14
14
|
HOMEPAGE = "http://github.com/ezmobius/redis-rb"
|
|
@@ -25,7 +25,7 @@ spec = Gem::Specification.new do |s|
|
|
|
25
25
|
s.authors = AUTHORS
|
|
26
26
|
s.email = EMAIL
|
|
27
27
|
s.homepage = HOMEPAGE
|
|
28
|
-
s.
|
|
28
|
+
s.add_development_dependency "rspec"
|
|
29
29
|
s.require_path = 'lib'
|
|
30
30
|
s.autorequire = GEM
|
|
31
31
|
s.files = %w(LICENSE README.markdown Rakefile) + Dir.glob("{lib,tasks,spec}/**/*")
|
data/lib/dist_redis.rb
CHANGED
|
@@ -77,7 +77,32 @@ class DistRedis
|
|
|
77
77
|
red.send(command, *args)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
|
+
|
|
81
|
+
def mset()
|
|
82
|
+
|
|
83
|
+
end
|
|
80
84
|
|
|
85
|
+
def mget(*keyz)
|
|
86
|
+
results = {}
|
|
87
|
+
kbn = keys_by_node(keyz)
|
|
88
|
+
kbn.each do |node, node_keyz|
|
|
89
|
+
node.mapped_mget(*node_keyz).each do |k, v|
|
|
90
|
+
results[k] = v
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
keyz.flatten.map { |k| results[k] }
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def keys_by_node(*keyz)
|
|
97
|
+
keyz.flatten.inject({}) do |kbn, k|
|
|
98
|
+
node = node_for_key(k)
|
|
99
|
+
next if kbn[node] && kbn[node].include?(k)
|
|
100
|
+
kbn[node] ||= []
|
|
101
|
+
kbn[node] << k
|
|
102
|
+
kbn
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
81
106
|
end
|
|
82
107
|
|
|
83
108
|
|
data/lib/hash_ring.rb
CHANGED
|
@@ -90,6 +90,9 @@ class HashRing
|
|
|
90
90
|
lower = idx + 1;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
+
if (upper < 0) {
|
|
94
|
+
upper = RARRAY_LEN(ary) - 1;
|
|
95
|
+
}
|
|
93
96
|
return upper;
|
|
94
97
|
}
|
|
95
98
|
EOM
|
|
@@ -113,6 +116,10 @@ class HashRing
|
|
|
113
116
|
lower = idx + 1
|
|
114
117
|
end
|
|
115
118
|
end
|
|
119
|
+
|
|
120
|
+
if upper < 0
|
|
121
|
+
upper = ary.size - 1
|
|
122
|
+
end
|
|
116
123
|
return upper
|
|
117
124
|
end
|
|
118
125
|
|
data/lib/redis.rb
CHANGED
|
@@ -31,11 +31,11 @@ class Redis
|
|
|
31
31
|
"sadd" => true,
|
|
32
32
|
"srem" => true,
|
|
33
33
|
"sismember" => true,
|
|
34
|
-
"rpoplpush" => true,
|
|
35
34
|
"echo" => true,
|
|
36
35
|
"getset" => true,
|
|
37
36
|
"smove" => true,
|
|
38
37
|
"zadd" => true,
|
|
38
|
+
"zincrby" => true,
|
|
39
39
|
"zrem" => true,
|
|
40
40
|
"zscore" => true
|
|
41
41
|
}
|
|
@@ -105,12 +105,14 @@ class Redis
|
|
|
105
105
|
"rename_unless_exists" => "renamenx",
|
|
106
106
|
"type?" => "type",
|
|
107
107
|
"zset_add" => "zadd",
|
|
108
|
-
"zset_count" =>
|
|
109
|
-
"zset_range_by_score" =>
|
|
110
|
-
"zset_reverse_range" =>
|
|
111
|
-
"zset_range" =>
|
|
112
|
-
"zset_delete" =>
|
|
113
|
-
"zset_score" =>
|
|
108
|
+
"zset_count" => "zcard",
|
|
109
|
+
"zset_range_by_score" => "zrangebyscore",
|
|
110
|
+
"zset_reverse_range" => "zrevrange",
|
|
111
|
+
"zset_range" => "zrange",
|
|
112
|
+
"zset_delete" => "zrem",
|
|
113
|
+
"zset_score" => "zscore",
|
|
114
|
+
"zset_incr_by" => "zincrby",
|
|
115
|
+
"zset_increment_by" => "zincrby"
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
DISABLED_COMMANDS = {
|
|
@@ -127,6 +129,7 @@ class Redis
|
|
|
127
129
|
@logger = options[:logger]
|
|
128
130
|
@thread_safe = options[:thread_safe]
|
|
129
131
|
@mutex = Mutex.new if @thread_safe
|
|
132
|
+
@sock = nil
|
|
130
133
|
|
|
131
134
|
@logger.info { self.to_s } if @logger
|
|
132
135
|
end
|
|
@@ -194,7 +197,7 @@ class Redis
|
|
|
194
197
|
begin
|
|
195
198
|
raw_call_command(argv.dup)
|
|
196
199
|
rescue Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED
|
|
197
|
-
@sock.close
|
|
200
|
+
@sock.close rescue nil
|
|
198
201
|
@sock = nil
|
|
199
202
|
connect_to_server
|
|
200
203
|
raw_call_command(argv.dup)
|
data/spec/redis_spec.rb
CHANGED
|
@@ -527,7 +527,38 @@ describe "redis" do
|
|
|
527
527
|
@r.delete('set4')
|
|
528
528
|
@r.delete('zset')
|
|
529
529
|
end
|
|
530
|
-
|
|
530
|
+
#
|
|
531
|
+
it "should be able to get a score for a specific value in a zset (ZSCORE)" do
|
|
532
|
+
@r.zset_add "zset", 23, "value"
|
|
533
|
+
@r.zset_score("zset", "value").should == "23"
|
|
534
|
+
|
|
535
|
+
@r.zset_score("zset", "value2").should be_nil
|
|
536
|
+
@r.zset_score("unknown_zset", "value").should be_nil
|
|
537
|
+
|
|
538
|
+
@r.delete("zset")
|
|
539
|
+
end
|
|
540
|
+
#
|
|
541
|
+
it "should be able to increment a range score of a zset (ZINCRBY)" do
|
|
542
|
+
# create a new zset
|
|
543
|
+
@r.zset_increment_by "hackers", 1965, "Yukihiro Matsumoto"
|
|
544
|
+
@r.zset_score("hackers", "Yukihiro Matsumoto").should == "1965"
|
|
545
|
+
|
|
546
|
+
# add a new element
|
|
547
|
+
@r.zset_increment_by "hackers", 1912, "Alan Turing"
|
|
548
|
+
@r.zset_score("hackers", "Alan Turing").should == "1912"
|
|
549
|
+
|
|
550
|
+
# update the score
|
|
551
|
+
@r.zset_increment_by "hackers", 100, "Alan Turing" # yeah, we are making Turing a bit younger
|
|
552
|
+
@r.zset_score("hackers", "Alan Turing").should == "2012"
|
|
553
|
+
|
|
554
|
+
# attempt to update a key that's not a zset
|
|
555
|
+
@r["i_am_not_a_zet"] = "value"
|
|
556
|
+
lambda { @r.zset_incr_by "i_am_not_a_zet", 23, "element" }.should raise_error
|
|
557
|
+
|
|
558
|
+
@r.delete("hackers")
|
|
559
|
+
@r.delete("i_am_not_a_zet")
|
|
560
|
+
end
|
|
561
|
+
#
|
|
531
562
|
it "should provide info (INFO)" do
|
|
532
563
|
[:last_save_time, :redis_version, :total_connections_received, :connected_clients, :total_commands_processed, :connected_slaves, :uptime_in_seconds, :used_memory, :uptime_in_days, :changes_since_last_save].each do |x|
|
|
533
564
|
@r.info.keys.should include(x)
|
|
@@ -583,7 +614,7 @@ describe "redis" do
|
|
|
583
614
|
end
|
|
584
615
|
|
|
585
616
|
it "should bgsave" do
|
|
586
|
-
@r.bgsave.should ==
|
|
617
|
+
['OK', 'Background saving started'].include?( @r.bgsave).should == true
|
|
587
618
|
end
|
|
588
619
|
|
|
589
620
|
it "should be able to ECHO" do
|
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: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ezra Zygmuntowicz
|
|
@@ -14,12 +14,12 @@ autorequire: redis
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date:
|
|
17
|
+
date: 2010-01-27 00:00:00 -08:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: rspec
|
|
22
|
-
type: :
|
|
22
|
+
type: :development
|
|
23
23
|
version_requirement:
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
25
|
requirements:
|