自动处理Redis连接

时间:2015-10-06 13:03:02

标签: c# redis servicestack

我注意到ServiceStack Redis的一些事情(事实上已经太晚了)是它在完成它们时不会自动处理它的连接。如果你忘记使用using语句处理它们或者调用dispose(),那么Redis本身就可以将它们计时并去除它们,但这可能需要很长时间才能结束,并且最终会出现荒谬的空闲连接数。 / p>

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

1 个答案:

答案 0 :(得分:1)

Redis客户端封装了一个TCP连接,在完成使用后需要明确处理它。如果您使用的是Pooled Redis ClientManager,则只需将客户端返回到池中(即它不会关闭TCP连接)。

如果您访问ServiceStack服务中的base.Redis属性,它只会在使用时创建,并且会通过使用惰性属性并将其置于服务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())
{
    //...
}