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