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
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 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 must . The old
Redis.currentused one connection per thread. To do that yourself, a bulky
Thread.current[:redis]should work but you have to initialize it per thread which may or may not be cumbersome in your case.
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.