Readthis
Readthis is a drop in replacement for any ActiveSupport compliant cache, but
emphasizes performance and simplicity. It takes some cues from Dalli (connection
pooling), the popular Memcache client. Below are some performance comparisons
against the only other notable redis cache implementation, redis-activesupport,
which has been abandoned and doesn't actually comply to Rails 4.2 cache store
behavior for fetch_multi.
Footprint & Performance
See [Performance][PERFORMANCE.md]
Installation
Add this line to your application's Gemfile:
gem 'readthis'
Usage
Use it the same way as any other ActiveSupport::Cache::Store. Within a rails environment config:
config.cache_store = :readthis_store, ENV.fetch('REDIS_URL'), {
expires_in: 2.weeks,
namespace: 'cache'
}
Otherwise you can use it anywhere, without any reliance on ActiveSupport:
require 'readthis'
cache = Readthis::Cache.new(ENV.fetch('REDIS_URL'), expires_in: 2.weeks)
You'll want to use a specific database for caching, just in case you need to clear the cache entirely. Appending a number between 0 and 15 will specify the redis database, which defaults to 0. For example, using database 2:
REDIS_URL=redis://localhost:6379/2
Compression can be enabled for all actions by passing the compress flag. By
default all values greater than 1024k will be compressed automatically. If there
is any content has not been stored with compression, or perhaps was compressed
but is beneath the compression threshold, it will be passed through as is. This
means it is safe to enable or change compression with an existing cache. There
will be a decoding performance penalty in this case, but it should be minor.
config.cache_store = :readthis_store, ENV.fetch('REDIS_URL'), {
compress: true,
compression_threshold: 2.kilobytes
}
Differences
Readthis supports all of standard cache methods except for the following:
cleanup- redis does this with ttl for us alreadydelete_matched- you really don't want to perform key matching operations in redis. They are linear time and only support basic globbing.