Configurar um tempo limite do lado do cliente (Valkey e Redis) OSS - Amazon ElastiCache

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar um tempo limite do lado do cliente (Valkey e Redis) OSS

Configurando o tempo limite do lado do cliente

Configure devidamente o tempo limite do lado do cliente a fim de permitir que o servidor tenha tempo suficiente para processar a solicitação e gerar a resposta. Isso também permitirá antecipar-se à falha se a conexão com o servidor não puder ser estabelecida. Alguns OSS comandos do Valkey ou do Redis podem ser computacionalmente mais caros do que outros. Por exemplo, scripts Lua ou EXEC transaçõesMULTI/que contêm vários comandos que devem ser executados atomicamente. Em geral, um tempo limite do lado do cliente maior é recomendado para evitar um tempo limite do cliente antes que a resposta seja recebida do servidor, inclusive o seguinte:

  • Execução de comandos em várias teclas

  • Executando EXEC transaçõesMULTI/ou scripts Lua que consistem em vários comandos individuais do Valkey ou do Redis OSS

  • Leitura de valores grandes

  • Executando operações de bloqueio, como BLPOP

No caso de uma operação de bloqueioBLPOP, como, a melhor prática é definir o tempo limite do comando para um número menor que o tempo limite do soquete.

A seguir estão exemplos de código para implementar um tempo limite do lado do cliente em redis-py e Lettuce. PHPRedis

Exemplo 1 de configuração do tempo limite: redis-py

Este é um exemplo de código com 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)

Exemplo 2 de configuração de tempo limite: PHPRedis

Veja a seguir um exemplo de código comPHPRedis:

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

Exemplo 3 de configuração do tempo limite: Lettuce

Este é um exemplo de código com 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(); } } }