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 OSS commandes Valkey ou Redis peuvent être plus coûteuses en termes de calcul que d'autres. Par exemple, les scripts Lua ou EXEC les transactionsMULTI/qui contiennent plusieurs commandes qui doivent être exécutées 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 scriptsMULTI/EXECtransactions ou Lua composés de plusieurs commandes Valkey ou Redis individuelles OSS
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 celle-ciBLPOP, la meilleure 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 de temporisation 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(); } } }