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 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.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.add_dependency "rspec"
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}/**/*")
@@ -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
 
@@ -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
 
@@ -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" => 'zcard',
109
- "zset_range_by_score" => 'zrangebyscore',
110
- "zset_reverse_range" => 'zrevrange',
111
- "zset_range" => 'zrange',
112
- "zset_delete" => 'zrem',
113
- "zset_score" => 'zscore'
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)
@@ -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 == 'OK'
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.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: 2009-12-03 00:00:00 -08:00
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: :runtime
22
+ type: :development
23
23
  version_requirement:
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements: