我设计它使用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");
}
这是一个好的做法呢?
先感谢您!