Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redisで大きなハッシュを削除する

Redisで大きなオブジェクトの削除が遅い理由の詳細については、このクイック概要をお読みください

Redisで大きなハッシュを削除するには:

  1. キーの名前を一意の名前空間付きキーに変更して、ハッシュが他のRedisクライアントにすぐに「削除」されたように見えるようにします。

  2. ハッシュからフィールドが空になるまで段階的に削除します。削除コマンドのサイズを制限することで、サーバーを長時間ブロックしないようにします。

次のコードは、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での大きなオブジェクトの削除」に戻る


  1. 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_

  2. FastlyComputeでRedisを使用する

    この例では、古いバージョンのFastlyCLIを使用しています。最新バージョンについては、この記事を確認してください。 この投稿では、Fastly Compute@Edgeで実行される簡単なアプリケーションを作成します。アプリケーションはUpstashRedisにアクセスして、ページビューを追跡します。 モチベーション エッジコンピューティングは、近年最もエキサイティングなトレンドの1つです。 CloudflareやFastlyなどのCDNサービスは、ユーザーがエッジインフラストラクチャでアプリケーションを実行できるようにするために開始されました。これは、開発者がグローバルに分散された高