redis_getlock 0.1.0 → 0.1.1
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/CHANGELOG.md +7 -0
- data/README.md +15 -2
- data/lib/redis_getlock/version.rb +1 -1
- data/lib/redis_getlock.rb +7 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5ec4a3361c80eb549bd10339f8238fcfff931ff
|
4
|
+
data.tar.gz: f014c8fed835373c21c8e97b8bf9c9248b6c7437
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d29834b4078ed4ba5badcb4019061cde85eb1583c54dddb5e8e8f8cdaec5541d4964875e1cf4ac666ce508fd200a5e5e548e44a34a7d7ccec75046676400df4
|
7
|
+
data.tar.gz: a13b4af68d49ebf0da7cf9721e4ee1e2ed843c05fe3d3c5346707ca431ad5e5cdb0e69ec48504f12faecdccd90a61ac211137e8328d34558c0edff50a5c15e63
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -30,9 +30,9 @@ This gem takes a following approach to resolve this problem.
|
|
30
30
|
1. Expiration time is set to `2` (default) seconds
|
31
31
|
2. Extend the lock in each `1` (default) sencond interval invoking another thread
|
32
32
|
|
33
|
-
This way ensures to release orphaned lock in 2 seconds.
|
33
|
+
This way ensures to release orphaned lock in 2 seconds. We are released from caring of the value of `timeout`!!
|
34
34
|
|
35
|
-
Simple codes are as follows:
|
35
|
+
Simple ruby codes to explain how this gem works are as follows:
|
36
36
|
|
37
37
|
```ruby
|
38
38
|
loop do
|
@@ -83,6 +83,19 @@ Similarly with ruby standard library [mutex](https://ruby-doc.org/core-2.2.0/Mut
|
|
83
83
|
* unlock
|
84
84
|
* Releases the lock.
|
85
85
|
|
86
|
+
Options of `RedisGetlock.new` are:
|
87
|
+
|
88
|
+
* redis
|
89
|
+
* Provide a redis instance
|
90
|
+
* key
|
91
|
+
* Key name for a distributed lock
|
92
|
+
* logger
|
93
|
+
* Provide a logger for RedisGetlock (for debug)
|
94
|
+
* timeout
|
95
|
+
* The expiration timeout of the lock. The default is `2` second. Users usually do not need to care of this because the expiration is automatically extended in a invoked thread.
|
96
|
+
* interval
|
97
|
+
* Interval to extend lock expiration. Must be `timeout > interval`. The default is `1` second.
|
98
|
+
|
86
99
|
### Example
|
87
100
|
|
88
101
|
```ruby
|
data/lib/redis_getlock.rb
CHANGED
@@ -17,7 +17,7 @@ class RedisGetlock
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def lock
|
20
|
-
logger.info { "
|
20
|
+
logger.info { "#{log_head}Wait acquiring a redis lock '#{key}'" } if logger
|
21
21
|
if set_options_available?
|
22
22
|
lock_with_set_options
|
23
23
|
@thr = Thread.new(&method(:keeplock_with_set_options))
|
@@ -25,13 +25,13 @@ class RedisGetlock
|
|
25
25
|
lock_without_set_options
|
26
26
|
@thr = Thread.new(&method(:keeplock_without_set_options))
|
27
27
|
end
|
28
|
-
logger.info { "
|
28
|
+
logger.info { "#{log_head}Acquired a redis lock '#{key}'" } if logger
|
29
29
|
end
|
30
30
|
|
31
31
|
def unlock
|
32
32
|
@thr.terminate
|
33
33
|
redis.del(key)
|
34
|
-
logger.info { "
|
34
|
+
logger.info { "#{log_head}Released a redis lock '#{key}'" } if logger
|
35
35
|
end
|
36
36
|
|
37
37
|
def locked?
|
@@ -49,6 +49,10 @@ class RedisGetlock
|
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
+
def log_head
|
53
|
+
"PID-#{::Process.pid} TID-#{::Thread.current.object_id.to_s(36)}: "
|
54
|
+
end
|
55
|
+
|
52
56
|
def set_options_available?
|
53
57
|
return @set_options_avialble unless @set_options_avialble.nil?
|
54
58
|
major, minor, patch = redis.info['redis_version'].split('.').map(&:to_i)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_getlock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|