En fait, il existe une commande debug sleep qui fait exactement ce que vous voulez. Il est défini dans le fichier debug.c comme:
} else if (!strcasecmp(c->argv[1]->ptr,"sleep") && c->argc == 3) {
double dtime = strtod(c->argv[2]->ptr,NULL);
long long utime = dtime*1000000;
usleep(utime);
addReply(c,shared.ok);
} else {
S'il vous plaît noter qu'il bloque toute la boucle d'événements Redis (toutes les connexions) contrairement à BLPOP qui ne bloquer une connexion.
> ./redis-cli debug sleep 2
... 2 seconds wait ...
OK
Avec BLPOP, vous n'avez pas besoin d'un second fil puisque vous pouvez spécifier un délai d'attente:
> ./redis-cli blpop dummy_key_which_does_not_exist 2
... 2 seconds wait ...
(nil)
Une autre façon de faire Redis ne répond pas est d'envoyer des signaux STOP et CONT. Une fois que vous avez le pid de l'instance, il suffit de lancer:
kill -STOP $pid
sleep 1
kill -CONT $pid
Avec cette astuce signal tous les fils de l'instance Redis seront gelés (à savoir non seulement la boucle d'événements). Cela inclut les threads d'arrière-plan d'E/S.
Aha! BLPOP sur clé inexistante avec timeout est exactement ce dont j'ai besoin! Merci! –