module Sequel::Plugins::Caching

Sequel’s built-in caching plugin supports caching to any object that implements the Ruby-Memcache API (or memcached API with the :ignore_exceptions option):

cache_store.set(key, obj, time) # Associate the obj with the given key
                                # in the cache for the time (specified
                                # in seconds).
cache_store.get(key) # => obj   # Returns object set with same key.
cache_store.get(key2) # => nil  # nil returned if there isn't an object
                                # currently in the cache with that key.
cache_store.delete(key)         # Remove key from cache

If the :ignore_exceptions option is true, exceptions raised by cache_store.get are ignored and nil is returned instead. The memcached API is to raise an exception for a missing record, so if you use memcached, you will want to use this option.

Note that only lookups by primary key are cached using this plugin. The following methods use a lookup by primary key:

You should not use this plugin if you are using sharding and there are different rows for the same primary key on different shards.

Usage:

# Make all subclasses use the same cache (called before loading subclasses)
# using the Ruby-Memcache API, with the cache stored in the CACHE constant
Sequel::Model.plugin :caching, CACHE

# Make the Album class use the cache with a 30 minute time-to-live
Album.plugin :caching, CACHE, ttl: 1800

# Make the Artist class use a cache with the memcached protocol
Artist.plugin :caching, MEMCACHED_CACHE, ignore_exceptions: true