Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configurer un délai d'expiration côté client (Valkey et Redis OSS)
Configuration du délai d'expiration côté client
Configurez le délai d’expiration côté client de manière appropriée pour laisser au serveur suffisamment de temps pour traiter la demande et générer la réponse. Il pourra également procéder à une interruption immédiate si la connexion au serveur ne peut pas être établie. Certaines commandes Valkey ou Redis OSS peuvent être plus coûteuses en termes de calcul que d'autres. Par exemple, les scripts Lua ou les transactions MULTI/EXEC qui contiennent plusieurs commandes doivent être exécutés de manière atomique. En général, il est recommandé d’augmenter le délai d’expiration côté client pour éviter que le client n’expire avant de recevoir la réponse du serveur, notamment dans les cas suivants :
Exécution de commandes sur plusieurs clés
Exécution de transactions MULTI/EXEC ou de scripts Lua composés de plusieurs commandes Valkey ou Redis OSS individuelles
Lecture de valeurs élevées
Exécution d’opérations de blocage telles que BLPOP
Dans le cas d’une opération de blocage telle que BLPOP, la bonne pratique consiste à régler le délai d’expiration de la commande sur un nombre inférieur au délai d’expiration du socket.
Voici des exemples de code pour implémenter un délai d'attente côté client dans redis-py et Lettuce. PHPRedis
Exemple de configuration du délai d’expiration 1 : redis-py
Voici un exemple de code avec redis-py :
# connect to Redis server with a 100 millisecond timeout # give every Redis command a 2 second timeout client = redis.Redis(connection_pool=redis.BlockingConnectionPool(host=HOST, max_connections=10,socket_connect_timeout=0.1,socket_timeout=2)) res = client.set("key", "value") # will timeout after 2 seconds print(res) # if there is a connection error res = client.blpop("list", timeout=1) # will timeout after 1 second # less than the 2 second socket timeout print(res)
Exemple de configuration du délai d'expiration 2 : PHPRedis
Voici un exemple de code avec PHPRedis :
// connect to Redis server with a 100ms timeout // give every Redis command a 2s timeout $client = new Redis(); $timeout = 0.1; // 100 millisecond connection timeout $retry_interval = 100; // 100 millisecond retry interval $client = new Redis(); if($client->pconnect($HOST, $PORT, 0.1, NULL, 100, $read_timeout=2) != TRUE){ return; // ERROR: connection failed } $client->set($key, $value); $res = $client->set("key", "value"); // will timeout after 2 seconds print "$res\n"; // if there is a connection error $res = $client->blpop("list", 1); // will timeout after 1 second print "$res\n"; // less than the 2 second socket timeout
Exemple de configuration du délai d’expiration 3 : Lettuce
Voici un exemple de code avec Lettuce :
// connect to Redis server and give every command a 2 second timeout public static void main(String[] args) { RedisClient client = null; StatefulRedisConnection<String, String> connection = null; try { client = RedisClient.create(RedisURI.create(HOST, PORT)); client.setOptions(ClientOptions.builder() .socketOptions(SocketOptions.builder().connectTimeout(Duration.ofMillis(100)).build()) // 100 millisecond connection timeout .timeoutOptions(TimeoutOptions.builder().fixedTimeout(Duration.ofSeconds(2)).build()) // 2 second command timeout .build()); // use the connection pool from above example commands.set("key", "value"); // will timeout after 2 seconds commands.blpop(1, "list"); // BLPOP with 1 second timeout } finally { if (connection != null) { connection.close(); } if (client != null){ client.shutdown(); } } }