redis_queue 0.2.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/redis_queue.rb +43 -21
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2201c5c59c9745c3cbf47ecab0f0320fd2047b68
4
- data.tar.gz: 3cc5543162e1c7b875a2a43b192ea2d138ed9f90
3
+ metadata.gz: 14ecb40d446afdf9a51b35bba011c7b624b564da
4
+ data.tar.gz: 165266f148f89bb86f186ee5b1ea1a3d12519f3b
5
5
  SHA512:
6
- metadata.gz: 11cf94f54444abf30672422e09f1b438523c477b411fdb2f36b82388befe6bb5748d1a7193d3b309b45af1a9d4a968cd92d6f52c07715abfbcc38108ec3c01dc
7
- data.tar.gz: 1e65a38240397b876a20799dc10d4f6b555017864165c9d1ac78b0eacef78a401a365f1592b0cb359c6957b6c8974b6e81fdd73a1a4637e80fedb142970414d6
6
+ metadata.gz: 27ee2b2f69ac03bccc97ebaa87feb1f7f7224dd56261ef7c2167ca467d152d7215925633302158e9716cb0cb7296944051970b25f402855c3aaa24c3c8f225e7
7
+ data.tar.gz: c2399835758c0c4ffb8ab54f57dfd0a51216a2c4402622db938e9932ca6e3013b0cb61c5cef9c0442580d5d16a905f26ff5f2a3c3fdb34dedc75e4639a8518ab
data/lib/redis_queue.rb CHANGED
@@ -1,16 +1,37 @@
1
1
  require_relative 'redis_connection'
2
2
 
3
3
  class RedisQueue
4
+ SCRIPTS = {
5
+ fail: """
6
+ redis.call('sadd', ARGV[1]..'_failed', ARGV[2])
7
+ redis.call('srem', ARGV[1]..'_in_use', ARGV[2])
8
+ """,
9
+ done: """
10
+ redis.call('sadd', ARGV[1]..'_done', ARGV[2])
11
+ redis.call('srem', ARGV[1]..'_in_use', ARGV[2])
12
+ """,
13
+ unpop: """
14
+ redis.call('lpush', ARGV[1], ARGV[2])
15
+ redis.call('srem', ARGV[1]..'_in_use', ARGV[2])
16
+ """,
17
+ init_from: """
18
+ local vals = redis.call('smembers', ARGV[2])
19
+ for i = 1, table.getn(vals) do
20
+ redis.call('rpush', ARGV[1], vals[i])
21
+ end"""
22
+ }
23
+
4
24
  def initialize args={id: :messages, url: 'redis://localhost:6379/0'}
5
25
  @id = args.delete(:id)
6
26
  @redis = RedisConnection.new(args)
7
27
  @redis_blocking = RedisConnection.new(args)
28
+ load_scripts
8
29
  end
9
30
 
10
31
  def pop
11
- message = @redis_blocking.run { |redis| redis.blpop(@id) }.last
12
- @redis.run { |redis| redis.sadd "#{@id}_in_use", message }
13
- message
32
+ task = @redis_blocking.run { |redis| redis.blpop(@id) }.last
33
+ @redis.run { |redis| redis.sadd "#{@id}_in_use", task }
34
+ task
14
35
  end
15
36
 
16
37
  def push task
@@ -18,24 +39,15 @@ class RedisQueue
18
39
  end
19
40
 
20
41
  def fail task
21
- @redis.run do |redis|
22
- redis.sadd "#{@id}_failed", task
23
- redis.srem "#{@id}_in_use", task
24
- end
42
+ script :fail, @id, task
25
43
  end
26
44
 
27
45
  def done task
28
- @redis.run do |redis|
29
- redis.sadd "#{@id}_done", task
30
- redis.srem "#{@id}_in_use", task
31
- end
46
+ script :done, @id, task
32
47
  end
33
48
 
34
49
  def unpop task
35
- @redis.run do |redis|
36
- redis.lpush @id, task
37
- redis.srem "#{@id}_in_use", task
38
- end
50
+ script :unpop, @id, task
39
51
  end
40
52
 
41
53
  def reset
@@ -49,12 +61,7 @@ class RedisQueue
49
61
  end
50
62
 
51
63
  def init_from set
52
- @redis.run do |redis|
53
- redis.eval "local vals = redis.call('smembers', '#{set}')
54
- for i = 1, table.getn(vals) do
55
- redis.call('rpush', '#{@id}', vals[i])
56
- end"
57
- end
64
+ script(:init_from, @id, set)
58
65
  end
59
66
 
60
67
  def size
@@ -111,4 +118,19 @@ class RedisQueue
111
118
  redis.del "#{@id}_failed"
112
119
  end
113
120
  end
121
+
122
+ private
123
+
124
+ def load_scripts
125
+ @scripts = {}
126
+ @redis.run do |redis|
127
+ SCRIPTS.each do |name, code|
128
+ @scripts[name] = redis.script(:load, code)
129
+ end
130
+ end
131
+ end
132
+
133
+ def script name, *args
134
+ @redis.run { |redis| redis.evalsha @scripts[name], argv: args }
135
+ end
114
136
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Ignacio Fernandez