redis-unique-queue 0.0.8 → 0.0.9
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/README.md +6 -0
- data/lib/redis/unique/queue.rb +35 -22
- data/redis-unique-queue.gemspec +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9988ab673216ddbe91cfb262cfadfc946de64eb6
|
4
|
+
data.tar.gz: 4843b3685e9c9b763a2647cf8d042778459cb45d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c07a0e7e00592d7f2a43bcdefca9670a5cd2b9192b8156ed2a3f5e91676ed8966f947412c108de6b34b637a8d960355278e58a0b59361928a2e925b139af7435
|
7
|
+
data.tar.gz: 0c72f835e333b462a13fb84390d1597d071884788d77e233739e4f903b2478e45442981fe14c9ae8fc6213653f29be9702660617f3a6f6d707457d17e53d3190
|
data/README.md
CHANGED
data/lib/redis/unique/queue.rb
CHANGED
@@ -5,7 +5,7 @@ class Redis
|
|
5
5
|
class Queue
|
6
6
|
attr_reader :name
|
7
7
|
|
8
|
-
VERSION = "0.0.
|
8
|
+
VERSION = "0.0.9"
|
9
9
|
|
10
10
|
def initialize(name, redis_or_options = {})
|
11
11
|
@name = name
|
@@ -23,17 +23,15 @@ class Redis
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def pop
|
26
|
-
|
27
|
-
success, result = attempt_atomic_pop
|
28
|
-
end while !success && result
|
29
|
-
result
|
26
|
+
block_on_atomic_attempt{ attempt_atomic_pop }
|
30
27
|
end
|
31
28
|
|
32
29
|
def pop_all
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
block_on_atomic_attempt{ attempt_atomic_pop_all }
|
31
|
+
end
|
32
|
+
|
33
|
+
def pop_multi amount
|
34
|
+
block_on_atomic_attempt{ attempt_atomic_pop_multi amount }
|
37
35
|
end
|
38
36
|
|
39
37
|
def front
|
@@ -66,6 +64,7 @@ class Redis
|
|
66
64
|
|
67
65
|
def clear
|
68
66
|
@redis.del name
|
67
|
+
[]
|
69
68
|
end
|
70
69
|
|
71
70
|
def expire seconds
|
@@ -74,30 +73,44 @@ class Redis
|
|
74
73
|
|
75
74
|
private
|
76
75
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
result = all
|
81
|
-
if result
|
82
|
-
@redis.multi do |multi|
|
83
|
-
multi.del name
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
76
|
+
def attempt_atomic_pop_multi amount
|
77
|
+
attempt_atomic_read_write lambda{ peek 0, amount }, lambda{ |multi, read_result| multi.zremrangebyrank name, 0, amount - 1 }
|
78
|
+
end
|
87
79
|
|
88
|
-
|
80
|
+
def attempt_atomic_pop_all
|
81
|
+
attempt_atomic_read_write lambda{ all }, lambda{ |multi, read_result| multi.del name}
|
89
82
|
end
|
90
83
|
|
91
84
|
def attempt_atomic_pop
|
92
85
|
min_score = 0
|
93
86
|
max_score = Time.now.to_f
|
94
87
|
|
88
|
+
read = lambda do
|
89
|
+
@redis.zrangebyscore(name, min_score, max_score, :with_scores => false, :limit => [0, 1]).first
|
90
|
+
end
|
91
|
+
|
92
|
+
write = lambda do |multi, read_result|
|
93
|
+
multi.zrem name, read_result
|
94
|
+
end
|
95
|
+
|
96
|
+
attempt_atomic_read_write read, write
|
97
|
+
end
|
98
|
+
|
99
|
+
def block_on_atomic_attempt
|
100
|
+
begin
|
101
|
+
success, result = yield
|
102
|
+
end while !success && result
|
103
|
+
result
|
104
|
+
end
|
105
|
+
|
106
|
+
def attempt_atomic_read_write read_op, write_op
|
107
|
+
|
95
108
|
result = nil
|
96
109
|
success = @redis.watch(name) do
|
97
|
-
result =
|
110
|
+
result = read_op.call
|
98
111
|
if result
|
99
112
|
@redis.multi do |multi|
|
100
|
-
|
113
|
+
write_op.call multi, result
|
101
114
|
end
|
102
115
|
end
|
103
116
|
end
|
data/redis-unique-queue.gemspec
CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_runtime_dependency 'redis'
|
22
|
+
spec.add_development_dependency "rake", '~> 0'
|
23
|
+
spec.add_runtime_dependency 'redis', '~> 0'
|
24
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-unique-queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Misha Conway
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,28 +28,28 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: redis
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: A unique queue with atomic operations implemented in Redis.
|