Configurar un tiempo de espera del lado del cliente (Valkey y Redis) OSS - Amazon ElastiCache

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configurar un tiempo de espera del lado del cliente (Valkey y Redis) OSS

Configurar el tiempo de espera del lado del cliente

Configure el tiempo de espera del lado del cliente de la manera adecuada, a fin de que el servidor tenga tiempo suficiente para procesar la solicitud y generar la respuesta. Esto también le permitirá responder rápido a los errores si no se puede establecer la conexión con el servidor. Algunos OSS comandos de Valkey o Redis pueden ser más costosos desde el punto de vista computacional que otros. Por ejemplo, los scripts de Lua o EXEC las transaccionesMULTI/que contienen varios comandos que deben ejecutarse de forma atómica. Por lo general, es recomendable aumentar el tiempo de espera del cliente para evitar que este se quede sin tiempo antes de recibir la respuesta del servidor, lo que incluye lo siguiente:

  • Ejecutar comandos en varias claves

  • Ejecutar EXEC transaccionesMULTI/o scripts de Lua que constan de varios comandos individuales de Valkey o Redis OSS

  • Leer valores grandes

  • Realizar operaciones de bloqueo, como BLPOP

En el caso de una operación de bloqueo comoBLPOP, por ejemplo, la mejor práctica es establecer el tiempo de espera del comando en un número inferior al tiempo de espera del socket.

Los siguientes son ejemplos de código para implementar un tiempo de espera del lado del cliente en redis-py y Lettuce. PHPRedis

Ejemplo 1 de configuración de tiempo de espera: redis-py

A continuación, puede ver un ejemplo de código con 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)

Ejemplo 2 de configuración de tiempo de espera: PHPRedis

El siguiente es un ejemplo de código conPHPRedis:

// 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

Ejemplo 3 de configuración de tiempo de espera: Lettuce

A continuación, puede ver un ejemplo de código con 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(); } } }