自动处理Redis连接
本文关键字:连接 Redis 处理 | 更新日期: 2023-09-27 18:16:19
我注意到ServiceStack Redis(诚然太晚了)是,它不会自动处理它的连接,当它完成与他们。如果您忘记使用using语句或调用dispose()来处理它们,则留给Redis自己计时并清除它们,但这可能需要很长时间,并且最终会产生大量空闲连接。
所以我想知道的是,是否有某种方法可以告诉垃圾回收器自动处理连接,以防万一。
Redis客户端封装了一个TCP连接,它需要在你完成使用后显式地处理。如果你正在使用Pooled Redis ClientManager,这只是将客户端返回到池中(即它不会关闭TCP连接)。
如果你在ServiceStack服务中访问base.Redis
属性,它只在使用时创建,并且通过使用lazy属性并在Services Dispose()
方法中处置它而自动处置,例如:
public class Service
{
private IRedisClient redis;
public virtual IRedisClient Redis
{
get { return redis ?? (redis = RedisManager.GetClient()); }
}
public virtual void Dispose()
{
if (redis != null)
redis.Dispose();
}
}
你可以在你的依赖项中遵循类似的模式,否则你应该使用using语句来确保客户端在使用后总是被丢弃,例如:
using (var redis = redisManager.GetClient())
{
//...
}