提供されたデータだけで説明するのは難しいですが、これが私の推測です。明らかなレイテンシーソース(永続性にリンクされているもの)をすでに確認しており、遅いログでRedisコマンドがCPUを占有しておらず、Python-rqによって取得されたジョブデータのサイズが大きくないことを前提としています。
ドキュメントによると、Python-rqはジョブをハッシュオブジェクトとしてRedisに挿入し、Redisに関連するキーを期限切れにして(500秒がデフォルト値のようです)、ジョブを削除します。深刻なスループットがある場合、ある時点で、Redisの多くのアイテムが期限切れになるのを待っています。それらの数は、保留中のジョブと比較して高くなります。
この点は、INFOコマンドの結果で期限切れになるアイテムの数を確認することで確認できます。
Redisの有効期限は、レイジーメカニズム(キーにアクセスしたときに適用される)と、イベントループで実行されるキーサンプリングに基づくアクティブなメカニズム(疑似バックグラウンドモードでは、100ミリ秒ごと)に基づいています。重要なのは、アクティブな有効期限メカニズムが実行されているとき、Redisコマンドを処理できないことです。
クライアントアプリケーションのパフォーマンスに過度の影響を与えないようにするために、アクティブなメカニズムがトリガーされるたびに処理されるキーの数は限られています(デフォルトでは10キー)。ただし、25%を超えるキーが期限切れになっていることが判明した場合は、さらに多くのキーとループを期限切れにしようとします。これは、この確率的アルゴリズムが、Redisが期限切れにする必要のあるキーの数にそのアクティビティを自動的に適応させる方法です。
ただし、多くのキーが期限切れになる場合、この適応アルゴリズムはRedisのパフォーマンスに大きな影響を与える可能性があります。詳細については、こちらをご覧ください。
私の提案は、有効期限を設定することで、Python-rqがアイテムのクリーニングをRedisに委任しないようにすることです。とにかく、これはキューイングシステムには不十分な設計です。