Description
Rack::Cache is suitable as a quick drop-in component to enable HTTP caching for Rack-based applications that produce freshness (Expires, Cache-Control) and/or validation (Last-Modified, ETag) information:
Rack::Cache alternatives and similar gems
Based on the "Caching" category.
Alternatively, view Rack::Cache alternatives based on common mentions on social networks and blogs.
-
IdentityCache
IdentityCache is a blob level caching solution to plug into Active Record. Don't #find, #fetch! -
redis-store
Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks -
Second Level Cache
Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4, 5 and 6. -
rails-brotli-cache
Drop-in enhancement for Rails cache, offering better performance and compression with Brotli algorithm -
ActiveModelCachers
Simply cache whatever you want by using cachers which will help you maintain cached objects and expire them when they are changed.
Scout Monitoring - Performance metrics and, now, Logs Management Monitoring with Scout Monitoring
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Rack::Cache or a related project?
README
Moved to https://github.com/rack/rack-cache
Rack::Cache
Rack::Cache is suitable as a quick drop-in component to enable HTTP caching for Rack-based applications that produce freshness (Expires, Cache-Control) and/or validation (Last-Modified, ETag) information:
- Standards-based (RFC 2616)
- Freshness/expiration based caching
- Validation (If-Modified-Since / If-None-Match)
- Vary support
- Cache-Control: public, private, max-age, s-maxage, must-revalidate, and proxy-revalidate.
- Portable: 100% Ruby / works with any Rack-enabled framework
- Disk, memcached, and heap memory storage backends
For more information about Rack::Cache features and usage, see:
https://rtomayko.github.com/rack-cache/
Rack::Cache is not overly optimized for performance. The main goal of the project is to provide a portable, easy-to-configure, and standards-based caching solution for small to medium sized deployments. More sophisticated / high-performance caching systems (e.g., Varnish, Squid, httpd/mod-cache) may be more appropriate for large deployments with significant throughput requirements.
Installation
gem install rack-cache
Basic Usage
Rack::Cache
is implemented as a piece of Rack middleware and can be used with
any Rack-based application. If your application includes a rackup (.ru
) file
or uses Rack::Builder to construct the application pipeline, simply require
and use as follows:
require 'rack/cache'
use Rack::Cache,
metastore: 'file:/var/cache/rack/meta',
entitystore: 'file:/var/cache/rack/body',
verbose: true
run app
Assuming you've designed your backend application to take advantage of HTTP's caching features, no further code or configuration is required for basic caching.
Using with Rails
# config/application.rb
config.action_dispatch.rack_cache = true
# or
config.action_dispatch.rack_cache = {
verbose: true,
metastore: 'file:/var/cache/rack/meta',
entitystore: 'file:/var/cache/rack/body'
}
You should now see Rack::Cache
listed in the middleware pipeline:
rake middleware
Using with Dalli
Dalli is a high performance memcached client for Ruby. More information at: https://github.com/mperham/dalli
require 'dalli'
require 'rack/cache'
use Rack::Cache,
verbose: true,
metastore: "memcached://localhost:11211/meta",
entitystore: "memcached://localhost:11211/body"
run app
Noop entity store
Does not persist response bodies (no disk/memory used). Responses from the cache will have an empty body. Clients must ignore these empty cached response (check for X-Rack-Cache response header). Atm cannot handle streamed responses, patch needed.
require 'rack/cache'
use Rack::Cache,
verbose: true,
metastore: <any backend>
entitystore: "noop:/"
run app
Ignoring tracking parameters in cache keys
It's fairly common to include tracking parameters which don't affect the content
of the page. Since Rack::Cache uses the full URL as part of the cache key, this
can cause unneeded churn in your cache. If you're using the default key class
Rack::Cache::Key
, you can configure a proc to ignore certain keys/values like
so:
Rack::Cache::Key.query_string_ignore = proc { |k, v| k =~ /^(trk|utm)_/ }
*Note that all licence references and agreements mentioned in the Rack::Cache README section above
are relevant to that project's source code only.