Redisで大きなハッシュを削除する
Redisで大きなオブジェクトの削除が遅い理由の詳細については、このクイック概要をお読みください
Redisで大きなハッシュを削除するには:
-
キーの名前を一意の名前空間付きキーに変更して、ハッシュが他のRedisクライアントにすぐに「削除」されたように見えるようにします。
-
ハッシュからフィールドが空になるまで段階的に削除します。削除コマンドのサイズを制限することで、サーバーを長時間ブロックしないようにします。
次のコードは、Redis接続の失敗を適切に処理しないことに注意してください。いずれかのRedisコマンドが失敗して例外が発生した場合は、手動でクリーンアップする必要があります。
# Rename the key
newkey = "gc:hashes:" + redis.INCR( "gc:index" )
redis.RENAME("my.hash.key", newkey)
# Delete fields from the hash in batche of 100s
cursor = 0
loop
cursor, hash_keys = redis.HSCAN(newkey, cursor, "COUNT", 100)
if hash_keys count > 0
redis.HDEL(newkey, hash_keys)
end
if cursor == 0
break
end
end
$redis = Redis.new
def delete_hash(key)
# Rename the key
newkey = "gc:hashes:#{$redis.incr("gc:index")}"
$redis.rename(key, newkey)
# Delete fields from the hash in batches of 100
cursor = "0"
loop do
cursor, fields = $redis.hscan(newkey, cursor, count: 100)
hkeys = fields.map { |pair| pair[0] }
$redis.hdel(newkey, hkeys) if hkeys.size > 0
break if cursor == "0"
end
end
# Example:
#
# delete_hash("my.large.hash")
以下は、Rubyでバックグラウンドジョブを使用した上記の実装例です。
- レスク
- Sidekiq
←「Redisでの大きなオブジェクトの削除」に戻る
-
Redisでのハッシュの使用
Redisのハッシュは、フィールドと値の両方が文字列である単一のキーの下に、関連付けられたフィールドと値のペアを格納する方法です。 Redisでは、データ構造全体と、構造内の各フィールドの両方を変更できます。これにより、アプリケーション内のオブジェクトの優れた(そして非常に高速な)バッキングストアになります。 CLIの例 2つのフィールドでハッシュを作成します: 127.0.0.1:6379> HMSET my_hash key1 foo key2 bar OK ハッシュに関連付けられているフィールドと値を一覧表示します: 127.0.0.1:6379> HGETALL my_
-
FastlyComputeでRedisを使用する
この例では、古いバージョンのFastlyCLIを使用しています。最新バージョンについては、この記事を確認してください。 この投稿では、Fastly Compute@Edgeで実行される簡単なアプリケーションを作成します。アプリケーションはUpstashRedisにアクセスして、ページビューを追跡します。 モチベーション エッジコンピューティングは、近年最もエキサイティングなトレンドの1つです。 CloudflareやFastlyなどのCDNサービスは、ユーザーがエッジインフラストラクチャでアプリケーションを実行できるようにするために開始されました。これは、開発者がグローバルに分散された高