diff --git a/Gemfile b/Gemfile
index 6a5f0c5343..616889a82d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -52,6 +52,7 @@ gem 'faraday-httpclient'
 gem 'fast_blank', '~> 1.0'
 gem 'fastimage'
 gem 'hiredis', '~> 0.6'
+gem 'hiredis-client'
 gem 'htmlentities', '~> 4.3'
 gem 'http', '~> 5.2.0'
 gem 'http_accept_language', '~> 2.1'
@@ -82,10 +83,10 @@ gem 'rqrcode', '~> 3.0'
 gem 'ruby-progressbar', '~> 1.13'
 gem 'sanitize', '~> 7.0'
 gem 'scenic', '~> 1.7'
-gem 'sidekiq', '~> 6.5'
+gem 'sidekiq', '< 8'
 gem 'sidekiq-bulk', '~> 0.2.0'
 gem 'sidekiq-scheduler', '~> 5.0'
-gem 'sidekiq-unique-jobs', '~> 7.1'
+gem 'sidekiq-unique-jobs', '> 8'
 gem 'simple_form', '~> 5.2'
 gem 'simple-navigation', '~> 4.4'
 gem 'stoplight', '~> 4.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 83a9751c7a..5d48d3bbf1 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -129,9 +129,6 @@ GEM
     brakeman (7.0.2)
       racc
     browser (6.2.0)
-    brpoplpush-redis_script (0.1.3)
-      concurrent-ruby (~> 1.0, >= 1.0.5)
-      redis (>= 1.0, < 6)
     builder (3.3.0)
     bundler-audit (0.9.2)
       bundler (>= 1.2.0, < 3)
@@ -296,6 +293,8 @@ GEM
     highline (3.1.2)
       reline
     hiredis (0.6.3)
+    hiredis-client (0.24.0)
+      redis-client (= 0.24.0)
     hkdf (0.3.0)
     htmlentities (4.3.4)
     http (5.2.0)
@@ -702,6 +701,8 @@ GEM
       psych (>= 4.0.0)
     redcarpet (3.6.1)
     redis (4.8.1)
+    redis-client (0.24.0)
+      connection_pool
     redlock (1.3.2)
       redis (>= 3.0.0, < 6.0)
     regexp_parser (2.10.0)
@@ -814,22 +815,22 @@ GEM
       websocket (~> 1.0)
     shoulda-matchers (6.5.0)
       activesupport (>= 5.2.0)
-    sidekiq (6.5.12)
-      connection_pool (>= 2.2.5, < 3)
-      rack (~> 2.0)
-      redis (>= 4.5.0, < 5)
+    sidekiq (7.3.9)
+      base64
+      connection_pool (>= 2.3.0)
+      logger
+      rack (>= 2.2.4)
+      redis-client (>= 0.22.2)
     sidekiq-bulk (0.2.0)
       sidekiq
     sidekiq-scheduler (5.0.6)
       rufus-scheduler (~> 3.2)
       sidekiq (>= 6, < 8)
       tilt (>= 1.4.0, < 3)
-    sidekiq-unique-jobs (7.1.33)
-      brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
+    sidekiq-unique-jobs (8.0.10)
       concurrent-ruby (~> 1.0, >= 1.0.5)
-      redis (< 5.0)
-      sidekiq (>= 5.0, < 7.0)
-      thor (>= 0.20, < 3.0)
+      sidekiq (>= 7.0.0, < 8.0.0)
+      thor (>= 1.0, < 3.0)
     simple-navigation (4.4.0)
       activesupport (>= 2.3.2)
     simple_form (5.3.1)
@@ -982,6 +983,7 @@ DEPENDENCIES
   haml_lint
   hcaptcha (~> 7.1)
   hiredis (~> 0.6)
+  hiredis-client
   htmlentities (~> 4.3)
   http (~> 5.2.0)
   http_accept_language (~> 2.1)
@@ -1070,10 +1072,10 @@ DEPENDENCIES
   scenic (~> 1.7)
   selenium-webdriver
   shoulda-matchers
-  sidekiq (~> 6.5)
+  sidekiq (< 8)
   sidekiq-bulk (~> 0.2.0)
   sidekiq-scheduler (~> 5.0)
-  sidekiq-unique-jobs (~> 7.1)
+  sidekiq-unique-jobs (> 8)
   simple-navigation (~> 4.4)
   simple_form (~> 5.2)
   simplecov (~> 0.22)
diff --git a/app/lib/redis_connection.rb b/app/lib/redis_connection.rb
index cbbd7e5a7a..2db5b794fd 100644
--- a/app/lib/redis_connection.rb
+++ b/app/lib/redis_connection.rb
@@ -15,7 +15,7 @@ class RedisConnection
 
     def pool_size
       if Sidekiq.server?
-        Sidekiq[:concurrency]
+        Sidekiq.default_configuration[:concurrency]
       else
         ENV['MAX_THREADS'] || 5
       end
diff --git a/app/workers/scheduler/self_destruct_scheduler.rb b/app/workers/scheduler/self_destruct_scheduler.rb
index d0b6ce8a07..645d957321 100644
--- a/app/workers/scheduler/self_destruct_scheduler.rb
+++ b/app/workers/scheduler/self_destruct_scheduler.rb
@@ -20,7 +20,7 @@ class Scheduler::SelfDestructScheduler
   private
 
   def sidekiq_overwhelmed?
-    redis_mem_info = Sidekiq.redis_info
+    redis_mem_info = Sidekiq.default_configuration.redis_info
 
     Sidekiq::Stats.new.enqueued > MAX_ENQUEUED || redis_mem_info['used_memory'].to_f > redis_mem_info['total_system_memory'].to_f * MAX_REDIS_MEM_USAGE
   end
diff --git a/config/database.yml b/config/database.yml
index eba20e849f..09f2e0d4dd 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -1,6 +1,6 @@
 default: &default
   adapter: postgresql
-  pool: <%= ENV["DB_POOL"] || (if Sidekiq.server? then Sidekiq[:concurrency] else ENV['MAX_THREADS'] end) || 5 %>
+  pool: <%= ENV["DB_POOL"] || (if Sidekiq.server? then Sidekiq.default_configuration[:concurrency] else ENV['MAX_THREADS'] end) || 5 %>
   timeout: 5000
   connect_timeout: 15
   encoding: unicode
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index fca0bec422..b2ebdbf078 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -89,6 +89,8 @@ Sidekiq.configure_server do |config|
     end
   end
 
+  config.logger.level = Logger.const_get(ENV.fetch('RAILS_LOG_LEVEL', 'info').upcase.to_s)
+
   SidekiqUniqueJobs::Server.configure(config)
 end
 
@@ -98,9 +100,9 @@ Sidekiq.configure_client do |config|
   config.client_middleware do |chain|
     chain.add SidekiqUniqueJobs::Middleware::Client
   end
-end
 
-Sidekiq.logger.level = ::Logger.const_get(ENV.fetch('RAILS_LOG_LEVEL', 'info').upcase.to_s)
+  config.logger.level = Logger.const_get(ENV.fetch('RAILS_LOG_LEVEL', 'info').upcase.to_s)
+end
 
 SidekiqUniqueJobs.configure do |config|
   config.enabled         = !Rails.env.test?
diff --git a/lib/mastodon/redis_configuration.rb b/lib/mastodon/redis_configuration.rb
index 5b04b24e09..7330f7d0e5 100644
--- a/lib/mastodon/redis_configuration.rb
+++ b/lib/mastodon/redis_configuration.rb
@@ -9,7 +9,6 @@ class Mastodon::RedisConfiguration
 
   def base
     @base ||= setup_config(prefix: nil, defaults: DEFAULTS)
-              .merge(namespace: nil)
   end
 
   def sidekiq
@@ -23,7 +22,7 @@ class Mastodon::RedisConfiguration
                  expires_in: 10.minutes,
                  connect_timeout: 5,
                  pool: {
-                   size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
+                   size: Sidekiq.server? ? Sidekiq.default_configuration[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
                    timeout: 5,
                  },
                })
diff --git a/spec/lib/mastodon/redis_configuration_spec.rb b/spec/lib/mastodon/redis_configuration_spec.rb
index 1f8f116bbf..d8a8dd86d2 100644
--- a/spec/lib/mastodon/redis_configuration_spec.rb
+++ b/spec/lib/mastodon/redis_configuration_spec.rb
@@ -156,7 +156,6 @@ RSpec.describe Mastodon::RedisConfiguration do
         expect(subject).to eq({
           url: 'redis://localhost:6379/0',
           driver: :hiredis,
-          namespace: nil,
         })
       end
     end
@@ -172,7 +171,6 @@ RSpec.describe Mastodon::RedisConfiguration do
         expect(subject).to eq({
           url: 'redis::/user@example.com/2',
           driver: :hiredis,
-          namespace: nil,
         })
       end
     end
@@ -188,7 +186,6 @@ RSpec.describe Mastodon::RedisConfiguration do
         expect(subject).to eq({
           url: 'redis://:testpass@redis.example.com:3333/3',
           driver: :hiredis,
-          namespace: nil,
         })
       end
     end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index 7d63ea6300..3d3e556f35 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -53,7 +53,7 @@ WebMock.disable_net_connect!(
   allow_localhost: true,
   allow: Chewy.settings[:host]
 )
-Sidekiq.logger = nil
+Sidekiq.default_configuration.logger = nil
 
 DatabaseCleaner.strategy = [:deletion]