복붙노트

[REDIS] 레디 스 serviceStack 풀 연결 클라이언트

REDIS

레디 스 serviceStack 풀 연결 클라이언트

나는 데이터베이스로 레디 스를 사용하는 웹 서비스를 설계하고있어, 나는 StackService 클라이언트와 연결 레디 스를 사용하는 가장 좋은 방법에 대해 알고 싶습니다.

요점은 내가 레디 스에 대해 읽어 봤는데 내가 서버와 상호 작용하는 가장 좋은 방법은 하나의 동시 연결을 사용하여 것으로 나타났습니다 것입니다.

문제는 내가 PooledRedisClientManager에게 웹 클라이언트가 웹 서비스에 요청을 할 때마다 사용하고 있습니다에도 불구하고 나는 레디 스 서버에 또 하나의 연결된 클라이언트 (연 연결) 및 소모 제한없이 연결된 클라이언트 증가의 수를 얻을 수 있다는 것입니다 더 더 많은 메모리.

샘플 '오류'코드 :

PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
   redisClient.Set("key1", "value1");
}

나는이 문제를 해결하기 위해 무슨 짓을, 정적의 RedisClient var에와 싱글 톤 패턴을 구현하는 클래스를 만드는 것입니다; 어느 redisClient가 초기화되어 있지 않은 경우 새로 생성하고,이 경우, 초기화를 반환합니다.

해결책:

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. ==============================

    1.나는 PooledRedisClientManager를 사용하고 그것을 잘 작동합니다 :

    나는 PooledRedisClientManager를 사용하고 그것을 잘 작동합니다 :

    내가 한 번만 실행하는 것이 샘플 코드 :

    static PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
    

    코드 나는 많은 스레드에서 실행 :

    var redisClient = pooledClientManager.GetClient();
    using (redisClient)
    {
        redisClient.Set("key" + i.ToString(), "value1");
    }
    

    나는 서버에 연결된 11 개의 클라이언트가 있습니다.

  2. from https://stackoverflow.com/questions/10597223/redis-servicestack-pooled-connection-client by cc-by-sa and MIT license