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

Ank*_*ain 13 redis stackexchange.redis asp.net-core-mvc

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

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

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

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

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

请帮忙。提前致谢

BR, 安吉特

Ahm*_*met 13

使用 ConnectionMultiplexer,您可以获得可以在 Redis 服务器上执行的完整命令列表。使用 DistributedCaching,您只能存储/检索字节数组或字符串,而不能执行 Redis 提供的任何其他命令。所以如果你只是想把它用作缓存存储,DistributedCaching 提供了一个很好的抽象层。但是,除非您使用 ConnectionMultiplexer,否则即使是最简单的 Redis 递增/递减命令也将不可用。


enz*_*nzi 10

扩展方法在幕后AddStackExchangeRedisCache使用 a ConnectionMultiplexer(参见此处此处了解扩展方法本身)。

@2:无论哪种方式都可以在产品中工作
@3:在第一次使用时延迟建立连接ConnectionMultiplexer实例被重用(注册为 DI 单例)
@4:是的,见上文。在这里, aSemaphoreSlim用于确保连接只创建一次

优点和缺点:由于两者都使用ConnectionMultiplexer,因此它们非常相似。
您可以在使用与实现无关的优势IDistributedCache与直接使用多路复用器和 StackExchange.Redis API(其具有比接口更具体的功能)之间进行选择。