redis_queue 0.6.1 → 0.7.0

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 +33 -3
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec321ee8d7b2c72ec76a0061f8676bf7a54f215f
4
- data.tar.gz: 6ab9ed9ead9ce2470728e0424a6b7ff96413adff
3
+ metadata.gz: 478d7768be5fbb3a39f9b578d1a0398f221e4dfa
4
+ data.tar.gz: d818a1f802cb83ff38f1a639bd8011dc0dedab7d
5
5
  SHA512:
6
- metadata.gz: 1e815a7e4272d0a79cb8ec709fa5bb663923983227e5a35bbe271c515fa96a496bd792c66cfdef8ed73c337c10e583ef24ea4029d453ec4931b2e5a58df8ddbf
7
- data.tar.gz: 4cbee5cb67aa31e53f4a1ea90cc1da7f6593e4b0687fa29b48f32ac6132e5da2bc0109397fd4fc0d8e44a9222d2109367c6ea53b0110e27bd4d817b86ca46b50
6
+ metadata.gz: f1be4795444eb4700248dded81c56c880cba7cb1490149acbf73913df7890331ad469274a192583f0f5255c5227ba0228862ed2d1015d32b79f680e020051706
7
+ data.tar.gz: 6a6c522e9b3542eff0dd875ff83567294795f69f6645a4e35a5fb5bb1d122c01fadfd3e1beb0e3040b0646e4b8232ba33c4b704f7b16d9969c700ec0d239c1b8
data/lib/redis_queue.rb CHANGED
@@ -22,6 +22,16 @@ class RedisQueue
22
22
  end
23
23
  return message
24
24
  "'',
25
+ touch: ''"
26
+ local message = ''
27
+ while message == '' do
28
+ message = redis.call('lpop', ARGV[1])
29
+ end
30
+ if message then
31
+ redis.call('rpush', ARGV[1], message)
32
+ end
33
+ return message
34
+ "'',
25
35
  repush: ''"
26
36
  #{PUSH_CODE}
27
37
  redis.call('srem', ARGV[1]..'_in_use', ARGV[2])
@@ -55,9 +65,7 @@ class RedisQueue
55
65
 
56
66
  def pop(block: true)
57
67
  return nonblpop unless block
58
- begin
59
- message = @redis_blocking.run { |redis| redis.blpop(@id) }.last
60
- end while message == ''
68
+ message = blpop
61
69
  @redis.run { |redis| redis.sadd "#{@id}_in_use", message } if message
62
70
  message
63
71
  end
@@ -86,6 +94,17 @@ class RedisQueue
86
94
  @redis.run { |redis| redis.srem "#{@id}_in_use", message }
87
95
  end
88
96
 
97
+ def remove(message)
98
+ @redis.run { |redis| redis.lrem @id, 0, message }
99
+ end
100
+
101
+ def touch(block: true)
102
+ return nonbltouch unless block
103
+ message = blpop
104
+ push(message)
105
+ message
106
+ end
107
+
89
108
  def reset
90
109
  init_from "#{@id}_in_use"
91
110
  @redis.run { |redis| redis.del "#{@id}_in_use" }
@@ -157,10 +176,21 @@ class RedisQueue
157
176
 
158
177
  private
159
178
 
179
+ def blpop
180
+ begin
181
+ message = @redis_blocking.run { |redis| redis.blpop(@id) }.last
182
+ end while message == ''
183
+ message
184
+ end
185
+
160
186
  def nonblpop
161
187
  script :nonblpop, @id
162
188
  end
163
189
 
190
+ def nonbltouch
191
+ script :touch, @id
192
+ end
193
+
164
194
  def load_scripts
165
195
  @scripts = {}
166
196
  @redis.run do |redis|
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.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Ignacio Fernandez