module Sequel::Plugins::Caching

  1. lib/sequel/plugins/caching.rb

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:

  • Model.with_pk

  • Model.with_pk!

  • Model.[] # when argument is not hash or nil

  • many_to_one association method # without dynamic callback, when primary key matches

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

Methods

Public Class

  1. configure

Public Class methods

configure(model, store, opts=OPTS)

Set the cache_store and cache_ttl attributes for the given model. If the :ttl option is not given, 3600 seconds is the default.

[show source]
   # File lib/sequel/plugins/caching.rb
47 def self.configure(model, store, opts=OPTS)
48   model.instance_exec do
49     @cache_store = store
50     @cache_ttl = opts[:ttl] || 3600
51     @cache_ignore_exceptions = opts[:ignore_exceptions]
52   end
53 end