sql >> データベース >  >> NoSQL >> Redis

ハッシュキー名に基づいてredisハッシュ値を一括で削除する

    次のEVALスクリプトは、必要な処理を実行する必要があります。

    local keys = redis.call('KEYS',KEYS[1])
    for i,k in ipairs(keys) do
        local res = redis.call('HKEYS',k)
        for j,v in ipairs(res) do
            if string.find(v,ARGV[1]) then
                redis.call('HDEL',k,v)
            end
        end
    end
    

    次のパラメータを指定して呼び出す必要があります。

    EVAL <script> 1 prefix:* cc_..
    

    スクリプトが完了するまでRedisイベントループをブロックするため、キーの数が多い場合は、Redisがしばらくフリーズする可能性があることに注意してください。 Atomicityには代償があります。

    更新:

    アトミック性が必要ない場合、次のスクリプトはRedisの長時間のブロックを回避します(ただし、グローバルなキーの数が膨大な場合、またはハッシュオブジェクトの1つが膨大な場合でも、ブロックされます。これを回避する方法はありません。

    ./redis-cli keys 'prefix:*' | awk '
    BEGIN {
        script = "local res = redis.call('\''HKEYS'\'',KEYS[1]); \
              for j,v in ipairs(res) do                          \
                if string.find(v,ARGV[1]) then                   \
                  redis.call('\''HDEL'\'',KEYS[1],v);            \
                end                                              \
              end"
    }
    {
        printf "EVAL \"%s\" 1 %s cc_..\n", script, $1
    }' | ./redis-cli
    

    (bashでテスト済み)



    1. Redisクラスターでパターンに一致するキーを削除する方法

    2. MongoDBの属性との多対多の関係を表すための最良のモデル

    3. MongoDB$またはクエリ

    4. LaravelをAWSのRedisクラスターで動作させる方法