gpt4 book ai didi

asp.net-core - 多个 IDistributedCache 定义未关闭 redis 连接

转载 作者:IT王子 更新时间:2023-10-29 06:16:33 26 4
gpt4 key购买 nike

为了实现多个 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 的客户端(info clients 命令)时,connected_clients 不停地增加,当我看到客户端列表(client list 命令)时,我看到了长时长和空闲的大型连接列表。

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

最佳答案

这是一个糟糕的依赖注入(inject)实现。 IDistributedCache 接口(interface)没有实现 redis INCR 命令,因此在我们项目的某个地方,我们直接使用 StackExchange.Redis 和创建多个连接多路复用器和 IDatabases 的 DI 包装器进行连接。

底线:我的错

关于asp.net-core - 多个 IDistributedCache 定义未关闭 redis 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com