Redisで大きなリストを効率的に削除する方法
Redisで大きなオブジェクトの削除が遅くなる理由について、詳しくはこちらの概要をご覧ください。
Redisに保存された大きなリストを削除するには、以下の手順を実行します。
まずキーを名前空間付きの一意な名前に変更(RENAME)します。これにより、他のRedisクライアントからはリストが即座に「削除された」ように見えます。
次に、リストが空になるまで要素を少しずつ小さなバッチで段階的に削除していきます。削除コマンドのサイズを制限することで、サーバーが長時間ブロックされるのを防ぎます。
なお、以下のコードはRedis接続の失敗を適切にハンドリングしていません。何らかのRedisコマンドが失敗して例外が発生した場合は、手動でクリーンアップを行う必要があります。
擬似コード
# キーの名前を変更
newkey = "gc:hashes:" + redis.INCR("gc:index")
redis.RENAME("my.list.key", newkey)
# 100件ずつバッチで要素を切り詰める
while redis.LLEN(newkey) > 0
redis.LTRIM(newkey, 0, -99)
end
Rubyでの実装例
$redis = Redis.new
def delete_list(key)
# キーの名前を変更
newkey = "gc:lists:#{$redis.incr("gc:index")}"
$redis.rename(key, newkey)
# 100件ずつバッチで要素を切り詰める
while $redis.llen(newkey) > 0
$redis.ltrim(newkey, 0, -99)
end
end
# 使用例:
#
# delete_list("my.large.list")
Rubyのバックグラウンドジョブを使った上記処理の実装例としては、以下のようなものがあります。
- Resque
- Sidekiq
← 「Redisでの大きなオブジェクトの削除」に戻る
-
Redis.ioが全面リニューアル――ドキュメント刷新とRedis Stack導入で開発者体験を拡張
本日、私たちはRedis.ioの全面リニューアルをお知らせできることを大変嬉しく思います。Redis.ioはこれまで一貫してRedisの「ホーム」であり、新しいユーザーにとっての入り口となるサイトでした。今回のリニューアルでは、Redisのコアドキュメントを見直すとともに、サイトデザインのモダン化とインフラの刷新を実施しました。 この記事では、サイトリニューアルの背景にある狙い、改訂作業で採用した原則、そして今後の展開についてご紹介します。 Redis.ioの刷新 Redisは初回コミットから13年という長い道のりを歩んできました。現在では基盤となるデータベース技術として確立され、世界中
-
Fastly ComputeでUpstash Redisを活用する方法
この記事では古いバージョンのFastly CLIを使用しています。最新の手順については、こちらの記事をご確認ください。 この記事では、Fastly Compute@Edge上で動作するシンプルなアプリケーションを作成します。このアプリケーションはUpstash Redisにアクセスし、ページビュー数を記録します。 モチベーション エッジコンピューティングは、近年最も注目されているトレンドのひとつです。CloudflareやFastlyといったCDNサービスは、ユーザーが自社のエッジインフラストラクチャ上でアプリケーションを実行できるようにしました。これにより、開発者はグローバルに分散した高