Skip to content
Snippets Groups Projects
Commit 941515e7 authored by Alex Reisner's avatar Alex Reisner
Browse files

Move auto-expiring cache to /examples.

parent 05acda82
No related branches found
No related tags found
No related merge requests found
...@@ -401,41 +401,10 @@ If you need to expire cached content: ...@@ -401,41 +401,10 @@ If you need to expire cached content:
Do *not* include the prefix when passing a URL to be expired. Expiring <tt>:all</tt> will only expire keys with the configured prefix (won't kill every entry in your key/value store). Do *not* include the prefix when passing a URL to be expired. Expiring <tt>:all</tt> will only expire keys with the configured prefix (won't kill every entry in your key/value store).
<i>Before you implement caching in your app please be sure that doing so does not violate the Terms of Service for your geocoding service.</i> For an example of a cache store with URL expiry please see examples/autoexpire_cache.rb
If you want to use Redis as a cache store, with values that expire automatically every 24 hours (or any other TTL), you can do this in the initialize :
class GeocoderAutoexpireCache <i>Before you implement caching in your app please be sure that doing so does not violate the Terms of Service for your geocoding service.</i>
def initialize(store)
@store = store
@ttl = 86400
end
def [](url)
@store.[](url)
end
def []=(url, value)
@store.[]=(url, value)
@store.expire(url, @ttl)
end
def keys
@store.keys
end
def del(url)
@store.del(url)
end
end
Geocoder.configure do |config|
config.cache = GeocoderAutoexpireCache.new(Redis.new)
end
It's a simple delegation to the Redis store, but when it creates a key/value pair, it is also sending an `EXPIRE` command with a `TTL`
It should be fairly simple to do the same thing with `Memcached`.
== Forward and Reverse Geocoding in the Same Model == Forward and Reverse Geocoding in the Same Model
......
# This class implements a cache with simple delegation to the Redis store, but
# when it creates a key/value pair, it also sends an EXPIRE command with a TTL.
# It should be fairly simple to do the same thing with Memcached.
class AutoexpireCache
def initialize(store)
@store = store
@ttl = 86400
end
def [](url)
@store.[](url)
end
def []=(url, value)
@store.[]=(url, value)
@store.expire(url, @ttl)
end
def keys
@store.keys
end
def del(url)
@store.del(url)
end
end
Geocoder.configure do |config|
config.cache = AutoexpireCache.new(Redis.new)
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment