atomic_redis_cache 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +12 -0
- data/README.md +34 -7
- data/atomic_redis_cache.gemspec +5 -1
- data/lib/atomic_redis_cache/version.rb +1 -1
- metadata +2 -1
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# AtomicRedisCache
|
2
2
|
|
3
|
+
[![Build Status](https://travis-ci.org/anujdas/atomic_redis_cache.png?branch=master)](https://travis-ci.org/anujdas/atomic_redis_cache)
|
4
|
+
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/atomic_redis_cache.png)](http://badge.fury.io/rb/atomic_redis_cache)
|
6
|
+
|
3
7
|
AtomicRedisCache is an overlay on top of Redis that allows you to use it much
|
4
8
|
like the Rails cache (ActiveSupport::Cache). Usage centers around the `.fetch()`
|
5
9
|
method, which reads from a key if present and valid, or else evaluates the
|
@@ -32,20 +36,43 @@ Or install it yourself as:
|
|
32
36
|
Ensure that you set the value of `AtomicRedisCache.redis`. This can be either an
|
33
37
|
instance of redis-rb (or compatible), or a lambda/Proc evaluating to one. Ex.
|
34
38
|
|
35
|
-
```
|
39
|
+
```
|
40
|
+
AtomicRedisCache.redis = Redis.new(:host => '127.0.0.1', :port => 6379)
|
41
|
+
```
|
36
42
|
|
37
43
|
Then use it as you would Rails.cache:
|
38
44
|
|
39
45
|
```
|
40
|
-
>>
|
46
|
+
>> AtomicRedisCache.fetch('key') { Faraday.get('http://example.com').status }
|
41
47
|
=> 200 # network call made
|
42
|
-
>>
|
43
|
-
=> 200 # value read from cache
|
48
|
+
>> AtomicRedisCache.fetch('key') { raise }
|
49
|
+
=> 200 # value read from cache; block not called
|
50
|
+
>> AtomicRedisCache.write('key', {:new => 'value'})
|
51
|
+
=> true
|
52
|
+
>> AtomicRedisCache.read('key')
|
53
|
+
=> {:new => "value"}
|
54
|
+
>> AtomicRedisCache.delete('key')
|
55
|
+
=> true
|
56
|
+
>> AtomicRedisCache.read('key')
|
57
|
+
=> nil
|
58
|
+
```
|
44
59
|
|
45
|
-
There are a couple of configurable options can be set per fetch:
|
60
|
+
There are a couple of configurable options that can be set per fetch/write:
|
46
61
|
- `:expires_in` - expiry in seconds; defaults to a day
|
47
|
-
- `:race_condition_ttl` - time to lock down key for recalculation
|
48
|
-
- `:max_retries` - # of times to retry cache refresh before expiring
|
62
|
+
- `:race_condition_ttl` - time to lock down key for recalculation; default 30s
|
63
|
+
- `:max_retries` - # of times to retry cache refresh before expiring; default 3
|
64
|
+
|
65
|
+
AtomicRedisCache is most useful when wrapped around expensive but rarely
|
66
|
+
changing calls, such as network APIs, that are hit frequently by many
|
67
|
+
processes. For instance,
|
68
|
+
|
69
|
+
```
|
70
|
+
AtomicRedisCache.fetch('search.results') do
|
71
|
+
JSON.parse(Faraday.get('https://internal-api/search?q=value').body)
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
will prevent your `internal-api` from getting pounded when the cached expires.
|
49
76
|
|
50
77
|
## Contributing
|
51
78
|
|
data/atomic_redis_cache.gemspec
CHANGED
@@ -23,5 +23,9 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'rake'
|
24
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
spec.add_development_dependency 'fakeredis'
|
26
|
-
|
26
|
+
if RUBY_VERSION == '1.8.7'
|
27
|
+
spec.add_development_dependency 'timecop', '0.5.2'
|
28
|
+
else
|
29
|
+
spec.add_development_dependency 'timecop'
|
30
|
+
end
|
27
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atomic_redis_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -99,6 +99,7 @@ extensions: []
|
|
99
99
|
extra_rdoc_files: []
|
100
100
|
files:
|
101
101
|
- ".gitignore"
|
102
|
+
- ".travis.yml"
|
102
103
|
- Gemfile
|
103
104
|
- LICENSE.txt
|
104
105
|
- README.md
|