Redis serviceStack пул подключений клиента
Я разрабатываю веб-сервис, который использует Redis в качестве базы данных, и я хочу знать лучшие практики использования Redis для соединения с клиентом StackService.
Дело в том, что я читал о Redis и обнаружил, что лучший способ взаимодействия с сервером - это использование одного одновременного соединения.
Проблема в том, что, несмотря на то, что я используюPooledRedisClientManager каждый раз, когда веб-клиент делает запрос к веб-службе, я получаю еще одного подключенного клиента (открытое подключение) к серверу redis, и это число подключенных клиентов увеличивается без ограничения, занимая все больше и больше памяти.
The sample 'fault' code:
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key1", "value1");
}
Чтобы решить эту проблему, я создал класс, реализующий одноэлементный шаблон со статическимRedisClient
вар; Который, еслиredisClient
не инициализируется, создает новый, и, если это так, возвращает инициализированный.
Solution:
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");
}
Это хорошая практика?
Заранее спасибо!