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