redis_queue 0.6.1 → 0.7.0
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.
- checksums.yaml +4 -4
- data/lib/redis_queue.rb +33 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 478d7768be5fbb3a39f9b578d1a0398f221e4dfa
|
4
|
+
data.tar.gz: d818a1f802cb83ff38f1a639bd8011dc0dedab7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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|
|