Estoy diseñando un servicio web que usa Redis como base de datos, y quiero conocer las mejores prácticas para usar Redis conectando con el cliente StackService.Redis serviceStack pool connection client
El punto es que he estado leyendo sobre Redis y encontré que la mejor manera de interactuar con el servidor es mediante el uso de una única conexión simultánea.
El problema es que a pesar de que estoy usando PooledRedisClientManager cada vez que un cliente web hace una solicitud al servicio web me sale un un cliente más conectado (conexión abierta) al servidor Redis y este número de cliente conectado aumenta sin límite consumiendo más y más memoria.
La muestra 'culpa' código:
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key1", "value1");
}
Lo que hice para resolver el problema, es crear una clase que implementa el patrón Singleton con una estática RedisClient
var; Que si el redisClient
no está inicializado crea uno nuevo, y si lo es, devuelve el inicializado.
Solución:
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");
}
¿Es esta una buena práctica?
¡Gracias de antemano!
¿Por qué sacó un ** redisClient ** del grupo pero no lo usa? pero están usando ** poolClientManager ** en su lugar? – mythz
Fue un error al escribir la pregunta, ahora se corrigió –
k, aunque podría editar su pregunta porque su 'código de falla' ahora funciona y la ** Solución ** provista no es la ideal. Agregue el problema y haga referencia a la respuesta aceptada para la solución ideal. – mythz