Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Meine Redis-Schlüssel laufen nicht ab

Da Sie ein '...' machen, ist es schwer mit Sicherheit zu sagen, aber ich würde sagen, Sie setzen mykey während dieses Teils, wodurch der Ablauf effektiv entfernt wird.

Aus dem EXPIRE-Handbuch

Das Timeout wird nur gelöscht, wenn der Schlüssel mit dem DEL-Befehl entfernt oder mit den SET- oder GETSET-Befehlen überschrieben wird

Auch in Bezug auf die -1-Antwort von TTL

Rückgabewert

Integer-Antwort:TTL in Sekunden oder -1, wenn der Schlüssel nicht existiert oder kein Timeout hat.

BEARBEITEN:Beachten Sie, dass sich dieses Verhalten in Redis 2.8 geändert hat

Ab Redis 2.8 hat sich der Rückgabewert im Fehlerfall geändert:
Der Befehl gibt -2 zurück, wenn der Schlüssel nicht existiert.
Der Befehl gibt -1 zurück, wenn der Schlüssel existiert, aber kein Ablaufdatum hat.

Mit anderen Worten, wenn Ihr Schlüssel existiert, scheint er dauerhaft zu sein, dh es ist kein Ablaufdatum festgelegt.

BEARBEITEN:Es scheint, dass ich dies reproduzieren kann, wenn ich den Schlüssel auf einem REDIS-Slave-Server erstelle, der Slave den Schlüssel nicht ohne Master-Eingabe löscht, da Sie normalerweise keine Schlüssel lokal auf einem Slave erstellen würden. Ist das hier der Fall?

Während die mit einem Master verbundenen Slaves die Schlüssel nicht unabhängig verfallen lassen (sondern auf das DEL vom Master warten), nehmen sie dennoch den vollständigen Status der im Datensatz vorhandenen Exploits an, wenn also ein Slave zu einem Master gewählt wird wird in der Lage sein, die Schlüssel unabhängig ablaufen zu lassen und vollständig als Master zu fungieren.