Version 5 of the Ruby Redis gem removes Redis.current
Redis.current will be removed without replacement in
Version 4.6.0 adds deprecation warnings for
`Redis.current=` is deprecated and will be removed in 5.0.
If your application still uses
Redis.current, you can only fix it by no longer using it. Here is how.
You can easily instantiate a
Redis client when you need it.
There is probably already a constant like
REDIS_URL that you use to configure Sidekiq or similar. So just use that one.
Redis.new(url: REDIS_URL).get('example') # instead of Redis.current.get('example')
The performance impact of instantiating is negligible.
You may obviously assign that to a local or instance variable, if you want to.
If you access Redis in tests, I suggest introducing a helper method. Example for RSpec:
module RedisHelpers def redis @redis ||= Redis.new(url: REDIS_URL) end end RSpec.configure do |config| config.include(RedisHelpers) end
Your Tests may then say
While not suggested, you can obviously still use a global object.
$redis = Redis.new(url: REDIS_URL)
That way, it's at least clear that
$redis is a shared global state.
If you're working with legacy code that depends on
Redis.current and can not be upgraded, you could of course also reintroduce it through a monkey patch.
Careful with threads
If your code uses threads, or if you're using a multi-threadeded web server like Puma, sharing
$redisthat way means all threads use a single Redis connection and .
$rediswill avoid that, but that may or may not be cumbersome to use, depending on your case.
Or, use athat is shared across threads. That solution is a bit more complex to set up.
Your development team has a full backlog of feature requests, chores and refactoring coupled with deadlines? We are familiar with that. With our "DevOps as a Service" offering, we support developer teams with infrastructure and operations expertise.