自动处理Redis连接

本文关键字:连接 Redis 处理 | 更新日期: 2023-09-27 18:16:19

我注意到ServiceStack Redis(诚然太晚了)是,它不会自动处理它的连接,当它完成与他们。如果您忘记使用using语句或调用dispose()来处理它们,则留给Redis自己计时并清除它们,但这可能需要很长时间,并且最终会产生大量空闲连接。

所以我想知道的是,是否有某种方法可以告诉垃圾回收器自动处理连接,以防万一。

自动处理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())
{
    //...
}