diff --git a/README.rdoc b/README.rdoc index 7ba6233859ab6b39562076827f9a582ca489166f..0e319f337e555e2e38e338c9303aa9997be89c0a 100644 --- a/README.rdoc +++ b/README.rdoc @@ -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). -<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> - -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 : +For an example of a cache store with URL expiry please see examples/autoexpire_cache.rb - class GeocoderAutoexpireCache - 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` +<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> -It should be fairly simple to do the same thing with `Memcached`. == Forward and Reverse Geocoding in the Same Model diff --git a/examples/autoexpire_cache.rb b/examples/autoexpire_cache.rb new file mode 100644 index 0000000000000000000000000000000000000000..cace891197f6d237080b3734956cac5a27cd13ee --- /dev/null +++ b/examples/autoexpire_cache.rb @@ -0,0 +1,30 @@ +# 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