Redis的serviceStack池连接客户端(Redis serviceStack pooled

2019-07-29 10:04发布

我设计它使用Redis的作为数据库的Web服务,我想知道使用Redis的与StackService客户端连接的最佳实践。

问题的关键是,我一直在阅读有关Redis的,我发现,与服务器交互的最佳方法是使用一个单一的并发连接。

问题是,尽管我使用PooledRedisClientManager每个网络客户端向web服务我得到Redis的服务器多了一个连接的客户端(打开连接),这个数字连接的客户端增加无限制的请求耗时更多,更多的内存。

样品“故障”代码:

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

我做了什么来解决这个问题,就是创建实现了静态Singleton模式类RedisClient变种; 这要是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");
}

这是一个好的做法呢?

先感谢您!

Answer 1:

我用PooledRedisClientManager并能正常工作:

示例代码,我只运行一次

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

和代码,我在许多线程上运行:

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

而我只有11连接到服务器的客户端。



文章来源: Redis serviceStack pooled connection client