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:

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

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

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