Low commit activity in last 3 years
A replacement for Rails' counter caches using memcached increment & decrement operations, implemented via after_commit hooks and the Dalli gem
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
 Project Readme

CachedCounts¶ ↑

A replacement for Rails' counter caches, using memcached.

Caches counts of models in a scope or association in memcached, and keeps the cache up to date using incr/decr operations.

You might prefer this gem over Rails' built-in counter caches when:

  • You want to cache the total number of models for a class or scope

  • You have a large association (e.g. followers of a popular figure) and want to avoid contention on a database row

  • You want your caches to occasionally expire and be refreshed to mitigate the risk of getting out of sync

  • You don't need to use counts as part of more complex SQL queries

There are many alternatives, but this gem appears to be unique in its approach. Other gems solve the contention issue by pushing updates to a background job, which has the advantage of continuing to populate a column that can be queried via SQL, but is still more costly than our approach, while introducing a synchronization delay.

Usage¶ ↑

Documentation

Basic usage:

class User < ActiveRecord::Base
  include CachedCounts

  has_many :followers, class_name: 'Following' #, ...
  scope :confirmed, ->{ where(confirmed: true) }

  # creates cached class method `User.confirmed_count`
  caches_count_where :confirmed, if: :confirmed?

  # creates cached instance method `user.followers_count`
  caches_count_of :followers
end

class Following < ActiveRecord::Base
  include CachedCounts

  belongs_to :followee, class_name: 'User' #, ...
end

Note that CachedCounts must be included in the counted class, but no class methods need be called there.

For full options, see docs for CachedCounts.caches_count_of and CachedCounts.caches_count_where.

Licence¶ ↑

MIT

Copyright Academia.edu

Contributing¶ ↑

Bug reports and pull requests are welcome on GitHub at github.com/academia-edu/cached_counts