redis_queue 0.2.2 → 0.3

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.
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