Puisque vous faites un "...", c'est difficile à dire avec certitude, mais je dirais que vous définissez mykey pendant cette partie, ce qui supprimera efficacement l'expiration.
Extrait du manuel EXPIRE
Le délai d'attente est effacé uniquement lorsque la clé est supprimée à l'aide de la commande DEL ou écrasée à l'aide des commandes SET ou GETSET
Aussi, concernant la réponse -1 de TTL
Valeur de retour
Réponse entière :TTL en secondes ou -1 lorsque la clé n'existe pas ou n'a pas de délai d'attente.
EDIT :notez que ce comportement a changé dans Redis 2.8
A partir de Redis 2.8, la valeur de retour en cas d'erreur a changé :
La commande retourne -2 si la clé n'existe pas.
La commande retourne -1 si la clé existe mais n'a pas d'expiration associée.
En d'autres termes, si votre clé existe, elle semblerait être persistante, c'est-à-dire qu'aucune date d'expiration n'est définie.
EDIT :Il semble que je puisse reproduire cela si je crée la clé sur un serveur esclave REDIS, l'esclave ne supprimera pas la clé sans entrée maître, car normalement vous ne créeriez pas de clés localement sur un esclave. Est-ce le cas ici ?
Cependant, alors que les esclaves connectés à un maître n'expireront pas les clés indépendamment (mais attendront le DEL provenant du maître), ils prendront toujours l'état complet des expirations existant dans l'ensemble de données, donc quand un esclave est élu à un maître, il sera en mesure d'expirer les clés indépendamment, agissant pleinement en tant que maître.