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

时间:2019-05-23 10:11:51

标签: redis asp.net-core-mvc stackexchange.redis

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

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

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

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

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

请帮助。 预先感谢

BR,Ankit

2 个答案:

答案 0 :(得分:8)

扩展方法AddStackExchangeRedisCache在幕后使用ConnectionMultiplexer(有关扩展方法本身,请参见herehere)。

@ 2:以两种方式均可生产
@ 3:connection is established lazily首次使用时,ConnectionMultiplexer实例被重新使用(注册为DI单例)
@ 4:是的,请参见上述。 hereSemaphoreSlim用于确保仅创建一次连接

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

答案 1 :(得分:0)

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