Rails cache connection settings

Updated . Posted . Visible to the public.

If you're using a Redis cache in Rails (e.g. :redis_cache_store), it's possible to configure additional parameters for your Redis connection.

Example config for Rails 7.2

config.cache_store = :redis_cache_store, {
  pool: { timeout: 0.5 },
  read_timeout: 0.2, # default 1 second
  write_timeout: 0.2, # default 1 second
  # Attempt two reconnects with some wait time in between
  reconnect_attempts: [1, 5], # default `1` attempt in Redis 5+
  url: REDIS_URL,
  error_handler: ->(method:, returning:, exception:) {
    Sentry.capture_exception(exception)
  },
}

Timeouts

You probably want to adapt these settings depending on your application. The default value for read_timeout and write_timeout is 1 second, which is quite high for a standard application, where regenerating the cached values probably is a lot faster than the 1 second timeout. Be careful when changing these values, because setting a too low value for timeouts can make your cache timeout too often. Note that Rails explicitly sets connect_timeout, read_timeout and write_timeout, which means that only configuring timeout will not propagate as expected.

Reconnection attempts

The Redis client will raise a Redis::ConnectionError if it can't connect. An integer for reconnect_attempts will be interpreted as seconds to wait. An array of numbers will be taken as the seconds to wait before each reconnect attempt.

Error handler

To notice exceptions raised by the client you can configure e.g. Sentry to pick up these exceptions.

Details

See the official guides Show archive.org snapshot for more information.

You can use Rails.cache.stats to get basic information about the current redis connection.

Niklas Hä.
Last edit
Dominik Schöler
License
Source code in this card is licensed under the MIT License.
Posted by Niklas Hä. to makandra dev (2023-05-15 11:33)