Configurer un délai d'expiration côté client (Valkey et Redis) OSS - Amazon ElastiCache

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(); } } }