

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Le migliori pratiche per i clienti (Valkey e Redis OSS)
<a name="BestPractices.Clients.redis"></a>

Scopri le best practice per gli scenari più comuni e segui gli esempi di codice di alcune delle più popolari librerie client open source Valkey e Redis OSS (redis-py e Lettuce) PHPRedis, nonché le migliori pratiche per interagire con le risorse con ElastiCache le librerie client Memcached open source di uso comune.

**Topics**
+ [Grande numero di connessioni (Valkey e Redis OSS)](BestPractices.Clients.Redis.Connections.md)
+ [Individuazione e backoff esponenziale dei client del cluster (Valkey e Redis OSS)](BestPractices.Clients.Redis.Discovery.md)
+ [Configurazione di un timeout lato client (Valkey e Redis OSS)](BestPractices.Clients.Redis.ClientTimeout.md)
+ [Configurazione di un timeout di inattività lato server (Valkey e Redis OSS)](BestPractices.Clients.Redis.ServerTimeout.md)
+ [Script Lua](BestPractices.Clients.Redis.LuaScripts.md)
+ [Archiviazione di elementi compositi di grandi dimensioni (Valkey e Redis OSS)](BestPractices.Clients.Redis.LargeItems.md)
+ [Configurazione del client Lettuce (Valkey e Redis OSS)](BestPractices.Clients-lettuce.md)
+ [Configurazione di un protocollo preferito per i cluster dual stack (Valkey e Redis OSS)](#network-type-configuring-dual-stack-redis)

## Configurazione di un protocollo preferito per i cluster dual stack (Valkey e Redis OSS)
<a name="network-type-configuring-dual-stack-redis"></a>

Per i cluster Valkey o Redis OSS abilitati alla modalità cluster, è possibile controllare il protocollo che i client utilizzeranno per connettersi ai nodi del cluster con il parametro IP Discovery. Il parametro IP Discovery può essere impostato su uno o. IPv4 IPv6 

Per i cluster Valkey o Redis OSS, il parametro IP Discovery imposta il protocollo IP utilizzato nell'output degli [slot del cluster ()](https://valkey.io/commands/cluster-slots/), dei [cluster shard ()](https://valkey.io/commands/cluster-shards/) e [dei nodi del cluster](https://valkey.io/commands/cluster-nodes/) (). Questi comandi vengono utilizzati dai client per scoprire la topologia del cluster. I client utilizzano i comandi IPs in theses per connettersi agli altri nodi del cluster. 

La modifica di IP Discovery non comporterà alcun tempo di inattività per i client connessi. Tuttavia, la propagazione delle modifiche richiederà tempo. Per determinare quando le modifiche si sono propagate completamente per un cluster Valkey o Redis OSS, monitora l'output di. `cluster slots` Una volta che tutti i nodi restituiti dal comando cluster slots hanno riportato il nuovo protocollo, IPs le modifiche hanno terminato la propagazione. 

Esempio con Redis-Py:

```
cluster = RedisCluster(host="xxxx", port=6379)
target_type = IPv6Address # Or IPv4Address if changing to IPv4

nodes = set()
while len(nodes) == 0 or not all((type(ip_address(host)) is target_type) for host in nodes):
    nodes = set()

   # This refreshes the cluster topology and will discovery any node updates.
   # Under the hood it calls cluster slots
    cluster.nodes_manager.initialize()
    for node in cluster.get_nodes():
        nodes.add(node.host)
    self.logger.info(nodes)

    time.sleep(1)
```

Esempio con Lettuce:

```
RedisClusterClient clusterClient = RedisClusterClient.create(RedisURI.create("xxxx", 6379));

Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4

Set<String> nodes;
    
do {
   // Check for any changes in the cluster topology.
   // Under the hood this calls cluster slots
    clusterClient.refreshPartitions();
    Set<String> nodes = new HashSet<>();

    for (RedisClusterNode node : clusterClient.getPartitions().getPartitions()) {
        nodes.add(node.getUri().getHost());
    }

    Thread.sleep(1000);
} while (!nodes.stream().allMatch(node -> {
            try {
                return finalTargetProtocolType.isInstance(InetAddress.getByName(node));
            } catch (UnknownHostException ignored) {}
            return false;
}));
```