Sto progettando un servizio Web che utilizza Redis come database e desidero conoscere le best practice per l'utilizzo di Redis che si connette al client StackService.Redis serviceStack client di connessione pool
Il punto è che ho letto su Redis e ho trovato che il modo migliore per interagire con il server è l'utilizzo di una singola connessione concorrente.
Il problema è che, nonostante sto usando PooledRedisClientManager ogni volta che un client web fa una richiesta al servizio web ho un un cliente più connesso (connessione aperta) al server Redis e questo numero di client connesso aumenta senza limiti consumando sempre più memoria.
L'esempio di codice 'colpa':
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key1", "value1");
}
Quello che ho fatto per risolvere il problema, è creare una classe che implementa il pattern Singleton con una statica RedisClient
var; Che se lo redisClient
non è inizializzato ne crea uno nuovo, e se lo è, restituisce quello inizializzato.
Soluzione:
public class CustomRedisPooledClient
{
private static CustomRedisPooledClient _instance = null;
public RedisClient redisClient = null;
// Objeto sincronización para hacer el Lock
private static object syncLock = new object();
private CustomRedisPooledClient()
{
redisClient = new RedisClient("localhost");
}
public static CustomRedisPooledClient GetPooledClient()
{
if (_instance == null)
{
lock (syncLock)
{
if (_instance == null)
{
_instance = new CustomRedisPooledClient();
}
}
}
return _instance;
}
}
CustomRedisPooledClient customRedisPooledClient = CustomRedisPooledClient.GetPooledClient();
using (customRedisPooledClient.redisClient)
{
customRedisPooledClient.redisClient.Set("key1", "value1");
}
Si tratta di una buona pratica?
Grazie in anticipo!
Perché hai estratto un ** redisClient ** dal pool ma non lo stai utilizzando? ma stai usando ** pooledClientManager **? – mythz
E 'stato un errore scrivere la domanda, ora è corretta –
k, io modificherei la tua domanda perché il tuo' codice di errore 'ora funziona e la ** Soluzione ** fornita non è l'ideale. Aggiungi qual è il problema e fai riferimento alla risposta accettata per la soluzione ideale. – mythz