2016-06-09 8 views
0

Ich benutze derzeit memcached, aber ich versuche, diesen Mechanismus zu redis zu bewegen.phpredis Funktion mSet mit ttl

Mein Ziel ist es, das gesamte Array (Schlüssel => Wert) alle 1000 Iterationen zu speichern.

Alte Lösung:

<?php 
$data = array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
); 
$memcached->setMulti($data, time()+864000); 

Neue Lösung:

<?php 
$data = array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
); 
$redis->mSet($data); 

Der Betrieb dieser Skripte ist fast identisch.

Wie Sie sehen können, kann die Redis das Ablaufdatum nicht festlegen, wenn ich multi (mSet-Funktion) verwende.

Irgendeine Lösung?

Antwort

1

MSET unterstützt die Optionen EX und PX nicht, die mit SET verfügbar sind. Sie haben 2 Möglichkeiten je nach Bedarf:

  • Wenn Sie diese atomar sein müssen, verwenden entweder transactions oder Lua scripting. Ein Beispiel mit Transaktionen (von redis-cli) würde wie folgt aussehen:

    > MULTI

    OK

    > SET key1 value1 EX 10

    QUEUED

    > SET key2 Wert2 EX 10

    QUEUED

    > EXEC

Ich bin mit phpredis nicht vertraut, aber es hat wahrscheinlich eine Abstraktion, die dies für Sie übernimmt.

  • Wenn Sie nicht über die Unteilbarkeit benötigen, können Sie nur pipelining mit mehreren verwenden SET Befehle.