业务场景: redis数据切换到Oracle,取消持久化,redis只做缓存
具体需求: 从redis从库里获得了400w个无过期时间的hashkey,需要在主库中将其删除
矛盾点: 1.如果直接批量删除会导致redis拥塞,影响正常业务 2.如果每删除一个key,sleep50ms,不会影响业务,但是根据经验要跑两天
最终问题: 在不影响性能的情况下,怎么快速批量删除redis数据?
人生最曼妙的风景,竟是内心的淡定与从容!
Redis はキーを非常に迅速に削除します。400 万のキーでも問題ありません。ボトルネックは実際にはネットワークにあるのではないかと思います。
キーを 1 つずつ削除すると、コマンドを送信するたびに、クライアントは Redis からの応答を待つことになり、多くのネットワーク帯域幅が無駄になります。
パイプライン/トランザクションを使用してみることができます。 redis側のネットワーク帯域を飽和させることなく、コマンドを最大速度で送信し、一気に実行します。
これが機能しない場合は、不要なキーを特定して削除する Lua スクリプトを作成し、それらを eval で実行するために Redis に送信できます。これによりネットワークがブロックされることはありません。
これがまだビジネスに影響を与える場合。 。究極の解決策は、マスター/スレーブを作成し、スレーブ上のキーを削除し、マスターを使用してリクエストを処理することです。キーを削除した後、スレーブをマスターに昇格させ、リクエストをスレーブに転送します。
Redis の eval コマンドを試してください。
たとえば、古い形式で始まるすべての KEY を削除します:
1 回の削除でパフォーマンスが大幅に消費される場合は、バッチで削除することを検討できます。
私の個人的な意見では、深夜 2 時に削除できます。最長のタイムラグはおそらく 1 分です。24 時間でない限り、この時間に使用する人は多くないはずです。百度淘宝網のような交通ウェブサイト!感謝する必要はありません、私の名前はレイ・フェンです
リーリー
Redis 3.4 以降:
Redis はキーを非常に迅速に削除します。400 万のキーでも問題ありません。ボトルネックは実際にはネットワークにあるのではないかと思います。
キーを 1 つずつ削除すると、コマンドを送信するたびに、クライアントは Redis からの応答を待つことになり、多くのネットワーク帯域幅が無駄になります。
パイプライン/トランザクションを使用してみることができます。 redis側のネットワーク帯域を飽和させることなく、コマンドを最大速度で送信し、一気に実行します。
これが機能しない場合は、不要なキーを特定して削除する Lua スクリプトを作成し、それらを eval で実行するために Redis に送信できます。これによりネットワークがブロックされることはありません。
これがまだビジネスに影響を与える場合。 。究極の解決策は、マスター/スレーブを作成し、スレーブ上のキーを削除し、マスターを使用してリクエストを処理することです。キーを削除した後、スレーブをマスターに昇格させ、リクエストをスレーブに転送します。
Redis の eval コマンドを試してください。
たとえば、古い形式で始まるすべての KEY を削除します:
リーリー1 回の削除でパフォーマンスが大幅に消費される場合は、バッチで削除することを検討できます。
私の個人的な意見では、深夜 2 時に削除できます。最長のタイムラグはおそらく 1 分です。24 時間でない限り、この時間に使用する人は多くないはずです。百度淘宝網のような交通ウェブサイト!感謝する必要はありません、私の名前はレイ・フェンです
リーリー
Redis 3.4 以降:
リーリー