相关疑难解决方法(0)

在 StartUp.cs 中通过 ConnectionMultiplexer 和 AddStackExchangeRedisCache(IDistributedCache) 使用 Redis 缓存的主要区别是什么?

我想在 ASP.NET Core 项目中实现分布式缓存(Redis)。经过一番研究,我发现有两种方法可以使用 Startup.cs 和 ConnectionMultiplexer 中的 AddStackExchangeRedisCache 创建 Redis 连接

  1. AddStackExchangeRedisCache - 这发生在 Startup.cs 中。上述方法的疑问:
  2. 这在 Prod 环境中有效吗?
  3. 何时以及如何初始化连接?
  4. 创建连接是线程安全的方式吗?

  5. 通过使用 ConnectionMultiplexer,我们可以初始化数据库实例。根据几篇文章,延迟初始化也会照顾到线程安全

疑问: 1. 从以上方法来看,哪种方法更好?

我在我的本地机器上尝试了两种方法都工作正常。但我找不到上述方法的优缺点。

请帮忙。提前致谢

BR, 安吉特

redis stackexchange.redis asp.net-core-mvc

13
推荐指数
2
解决办法
4283
查看次数

Redis 通配符删除

我正在使用 stackexchange redis 提供程序,并且尝试删除以某个键开头的所有键。

private readonly Lazy<IEnumerable<IServer>> allServers = new Lazy<IEnumerable<IServer>>(() => Connection.GetEndPoints().Select(s => Connection.GetServer(s)));
private const int DbId = 1;
private const int ScanPageSize = 1 << 14;

public void RemoveByPattern(string pattern)
{
    var keys = this.AllServers.Value.SelectMany(x => x.Keys(DbId, pattern + "*", ScanPageSize)).Distinct().ToArray();
    if (!keys.Any())
        return;
    this.Database.KeyDelete(keys);
}
Run Code Online (Sandbox Code Playgroud)

^^ 这是我想出的方法,大多数情况下效果很好。但是,一旦我在系统上施加一些负载,我就会收到如下错误:

  System.TimeoutException: Timeout performing SCAN, inst: 0, mgr: Inactive, queue: 11, qu=11, qs=0, qc=0, wr=0/1, in=0/0
     at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl (StackExchange.Redis.StrongName, Version=1.0.316.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46)
     at StackExchange.Redis.RedisServer.ExecuteSync (StackExchange.Redis.StrongName, Version=1.0.316.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46)
     at StackExchange.Redis.RedisBase+CursorEnumerable`1.GetNextPageSync …
Run Code Online (Sandbox Code Playgroud)

c# azure redis stackexchange.redis

5
推荐指数
1
解决办法
5604
查看次数

标签 统计

redis ×2

stackexchange.redis ×2

asp.net-core-mvc ×1

azure ×1

c# ×1