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

Это хорошая практика?

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос