sql >> Database >  >> NoSQL >> Redis

Hoe atomair miljoenen sleutels verwijderen die overeenkomen met een patroon met pure Redis?

Het volgende Lua-script gebruikt SCAN commando, dus het wordt in brokken verwijderd in het script - waarbij de fout "te veel elementen om uit te pakken" wordt vermeden.

local cursor = 0
local calls = 0
local dels = 0
repeat
    local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1])
    calls = calls + 1
    for _,key in ipairs(result[2]) do
        redis.call('DEL', key)
        dels = dels + 1
    end
    cursor = tonumber(result[1])
until cursor == 0
return "Calls " .. calls .. " Dels " .. dels

Het geeft terug hoe vaak SCAN is gebeld en hoeveel sleutels zijn verwijderd.

Gebruiken als:

EVAL "local cursor = 0 local calls = 0 local dels = 0 repeat    local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1])     calls = calls + 1   for _,key in ipairs(result[2]) do       redis.call('DEL', key)      dels = dels + 1     end     cursor = tonumber(result[1]) until cursor == 0 return 'Calls ' .. calls .. ' Dels ' .. dels" 0 prefix:1

Merk op dat het de server blokkeert tijdens het draaien, dus het wordt niet aanbevolen voor productie zoals het is.

Overweeg voor productie om DEL . te wijzigen voor UNLINK . U kunt ook de cursor retourneren (in plaats van herhalen in het script totdat deze nul is) en de parameter COUNT toevoegen aan SCAN om te vertragen (zie Is er een aanbevolen waarde van COUNT voor SCAN / HSCAN-opdracht in REDIS?). Op deze manier doe je het in brokken in plaats van in één keer, vergelijkbaar met Hoe krijg ik alle sets in redis?

Of u kunt iets geavanceerder doen met behulp van de benadering die in dit antwoord wordt vermeld:Redis `SCAN`:hoe kunt u een evenwicht bewaren tussen nieuwe sleutels die overeenkomen en zorgen voor een uiteindelijk resultaat binnen een redelijke tijd?



  1. Selecteer Groeperen op aantal en verschillende tellingen in dezelfde mongodb-query

  2. Selderij/Redis dezelfde taak wordt meerdere keren parallel uitgevoerd

  3. MongoDB Schrijfzorg:3 Must-Know Caveats

  4. mongoDB:een object-ID maken voor elk nieuw kind dat aan het array-veld wordt toegevoegd