多个IDistributedCache定义未关闭Redis连接

时间:2018-11-17 00:12:12

标签: asp.net-core redis

为了实现多个IDistributedCache定义,我具有以下解决方案:

public interface IDBCache : IDistributedCache
{
}

public class DBCacheOptions : RedisCacheOptions { }

public class DBCache : RedisCache, IDBCache
{
    public DBCache(IOptions<DBCacheOptions> optionsAccessor) : base(optionsAccessor)
    {

    }
}

我还有其他定义,例如上述指向不同Redis实例的pointint。

我正在Startup.cs上将缓存服务注册为:

services.Configure<DBCacheOptions>(options => options.Configuration = configuration.GetValue<string>("Cache:DB"));
services.Add(ServiceDescriptor.Singleton<IDBCache, DBCache>());

然后我将IDBCache包装为:

public class DBCacheManager
{
    private const string DB_CACHE_FORMAT = "DB:{0}";
    private const int DB_EXPIRATION_HOURS = 8;

    private readonly IDistributedCache _cache;

    public DBCacheManager(IDBCache cache)
    {
        _cache = cache;
    }

    public Task AddDBItem(string name, string value)
    {
            return _cache.SetStringAsync(string.Format(DB_CACHE_FORMAT, name), value,
                new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(DB_EXPIRATION_HOURS) });
    }
}

当我检查连接到redis的客户端(信息客户端命令),connected_clients不断增加而没有停止时,同样,当我看到客户端列表(client list命令)时,我看到的大型连接列表具有较长的寿命和空闲时间。

见解:我正在使用Redis实现的AWS ElasticCache,默认情况下具有无限的空闲超时,但是我想我不应该强迫关闭这些连接,对吗?我想我的应用程序应该负责。

1 个答案:

答案 0 :(得分:0)

这是依赖注入的错误实现。 IDistributedCache接口具有redis INCR命令的实现,因此,在我们项目的某个地方,我们直接使用StackExchange.Redis与DI包装器进行连接,该包装器创建了多个连接多路复用器和IDatabase。

最重要的是:我的坏人