Redis läuft und Inkrement

Habe ich ein Szenario, wo ich will, um zu implementieren eine caching-Mechanismus mit redis. Um weiter ins detail gehen

Erste, das ich überprüfen, die für den spezifischen Schlüssel mit client.get() und wenn der Wert nicht vorhanden ist. Ich brauche, um einen Anruf zu tätigen, um einen web service, der einen Wert zurückgibt und gespeichert ist, als das Kind den Schlüssel. Dann benutze ich client.set (), legen Sie diese Schlüssel in redis. Nun dieser Schlüssel muss ablaufen, wenn es für mehr als 24 Stunden, wie kann ich dies tun?

Hier ist ein Beispiel für das Schlüssel-Wert-Aussehen würde in redis

parentValue:{
    child1:{
        serviceVal: "serviceVal",
        counter: 0
    },

    child2:{...},
    child3:{...}
    .... 
}

Nun ähnlich wie bei der ersten client.get(), durchgeführt wird und wenn der Wert vorhanden ist und dieser bestimmte Schlüssel noch nicht abgelaufen ist. Ich möchte, erhöht sich der Zähler in das Objekt und aktualisieren Sie diesen spezifischen Schlüssel in redis. Wie kann ich dies tun?

InformationsquelleAutor RRP | 2016-04-27



One Reply
  1. 1

    SET mit NX und EX Optionen ist Ihre einfachste Lösung. Hier sehen Sie ein Beispiel für ein Modul ich arbeite hier.

    EX akzeptiert Sekunden, so dass Sie wollen 86400 Sekunden, für 24 Stunden.

    Aber für das Inkrementieren und auslaufenden würden Sie sich wahrscheinlich am besten mit einem redis-lua-Skript, so etwas wie:

    --[[
      key 1 -> key name
      arg 1 -> expires in seconds
      arg 2 -> incr by value
    ]]
    
    -- Key exists so increment it
    if redis.call('exists',KEYS[1]) > 0 then
      redis.call('incrby',KEYS[1],tonumber(ARGV[2]))
      return 0
    else
      -- key doesn't exist so create with an expiry and the incr amount
      redis.call('setex',KEYS[1],tonumber(ARGV[1]),tonumber(ARGV[2]))
      return 1
    end

    Dann haben Sie nur rufen Sie das Skript mit dem Schlüssel, Ablauf der Zeit und wie viel zu erhöhen um aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.