我正在设计一个将Redis用作数据库的Web服务,并且我想了解使用Redis与StackService客户端连接的最佳实践。
关键是我一直在阅读有关Redis的文章,发现与服务器交互的最佳方法是使用单个并发连接。
问题是,尽管每当Web客户端向Web服务发出请求时,我都会使用 PooledRedisClientManager ,但我又获得了一个到Redis服务器的连接客户端(打开的连接),并且此连接客户端的数量增加了,而又不限制消耗更多更多的内存。
示例“故障”代码:
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost"); var redisClient = pooledClientManager.GetClient(); using (redisClient) { redisClient.Set("key1", "value1"); }
我要解决的问题是创建一个使用静态RedisClientvar 实现单例模式的类;如果redisClient未初始化,则会创建一个新的,如果是,则返回已初始化的一个。
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"); }
这是一个好习惯吗?
先感谢您!
我用过PooledRedisClientManager并且工作正常:
PooledRedisClientManager
我只运行一次的 示例代码:
static PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
和我在许多线程上运行的代码:
var redisClient = pooledClientManager.GetClient(); using (redisClient) { redisClient.Set("key" + i.ToString(), "value1"); }
而且我只有11个客户端连接到服务器。