Redisで大きなオブジェクトを安全に削除する方法
Redisでは、ハッシュ・リスト・セット・ソート済みセット(ZSet)といった大きな非文字列型オブジェクトをDELコマンドで削除すると、サーバーが長時間ブロックされ、クライアント側でタイムアウトが発生するなどの問題につながる可能性があります。
この現象は、Redisの動作仕様における次の2つの要因によって引き起こされます。
サーバーがブロックされる2つの理由
1. Redisはシングルスレッドで動作している
Redisはシングルスレッドで動作するため、接続されているクライアントの数にかかわらず、同時に処理できるコマンドは1つだけです。そのため、あるコマンドの実行に時間がかかると、それ以外のすべてのコマンドが完了を待たされることになります。
2. DELコマンドはO(n)の計算量を持つ
DELは、ハッシュ・リスト・セット・ソート済みセットに対してO(n)の計算量で動作します。つまり、要素数100万のオブジェクトを削除する場合、同じ型で要素数100のオブジェクトを削除する場合と比べて、およそ10,000倍の時間がかかるということです。
サーバーをブロックせずに大きなオブジェクトを削除する方法
幸い、Redisにはサーバーを長時間ブロックさせることなく大きなオブジェクトを削除するための手段がいくつか用意されています。データ型ごとの代表的な解決策は以下のとおりです。
- 大きなハッシュの削除
- 大きなリストの削除
- 大きなセットの削除
- 大きなソート済みセットの削除
また、Redis 4.0以降では、実際の削除処理をバックグラウンドスレッドに任せるUNLINKコマンドが利用できます。DELの代わりにUNLINKを使うことで、メインスレッドのブロックを最小限に抑えながらキーを削除できるため、大きなオブジェクトを扱う際の第一の選択肢となります。
-
Redis.ioが全面リニューアル――ドキュメント刷新とRedis Stack導入で開発者体験を拡張
本日、私たちはRedis.ioの全面リニューアルをお知らせできることを大変嬉しく思います。Redis.ioはこれまで一貫してRedisの「ホーム」であり、新しいユーザーにとっての入り口となるサイトでした。今回のリニューアルでは、Redisのコアドキュメントを見直すとともに、サイトデザインのモダン化とインフラの刷新を実施しました。 この記事では、サイトリニューアルの背景にある狙い、改訂作業で採用した原則、そして今後の展開についてご紹介します。 Redis.ioの刷新 Redisは初回コミットから13年という長い道のりを歩んできました。現在では基盤となるデータベース技術として確立され、世界中
-
Excelで大量データを効率よく分析する6つの実践テクニック
本記事では、Excelを使って大量のデータセットを効率的に分析する方法を詳しく解説します。ビジネス活動の強みや課題を把握することは非常に重要です。組織の売上や販売記録を管理するのは動的なプロセスであり、一定期間内に販売・購入・取引が頻繁に行われるため、過去3〜4か月分の売上や利益を確認しようとすると、膨大な量のデータに直面することになります。 幸いなことに、Excelにはこうした課題を解決できる便利な機能が数多く備わっています。大量データを部分的に分割して分析すれば、計算作業もぐっと楽になります。 Excelで大量データを分析する6つの方法 ここからは、以下のサンプルデータセットを使って解説