9

我想知道 Redis 与它的 C# 客户端相比 Dictionary/ConcurrentDictionary 和其他方面有什么好处。

我不确定何时使用 redis 被认为是字典存储的过度杀伤力。

谢谢。

4

2 回答 2

19

Redis 对于本地的单机应用程序来说可能是一种过度杀伤力。尤其是数据不大的时候。

它主要用作L2缓存层。假设您有多台机器为您的应用程序提供服务,每台机器都可以拥有自己的本地缓存,而 Redis 可以作为所有机器的全局缓存。

假设您的应用程序的用户浏览到需要后端数据库中的一些数据的页面或功能。然后,您的应用将检查其本地 L1 缓存(例如字典)。这将是最快的方法,因为它不涉及任何网络往返。如果数据不存在,它将在 Redis 中查找它作为全局应用程序缓存。如果它在那里 - 很好 - 获取数据并放入本地 L1 缓存中。如果没有,请转到数据库,获取数据,将其放入 Redis (L2) 和本地缓存 (L1)。

你可以在这里阅读更多内容。

也就是说,除了缓存之外,Redis 还有更多用途——Pub/Sub 功能、SETs、SORTED SETs 和它们上的功能(如交集、联合等),甚至还有STRING类型上的智能功能,如按位运算。

于 2014-04-06T23:02:38.930 回答
5

如您所知,使用 Redis 进行服务器内缓存将是一种矫枉过正的做法。

但是在分布式应用程序中使用 Redis 和 C#肯定会带来一些好处(以下所有操作都是线程安全的):

  1. 您可以在 C# 中为您的项目构建自定义 ORM 包装器,以便可以从另一台服务器无缝访问来自一台服务器的 .NET 对象。您可以将Dictionary对象缓存在 Redis 哈希中,将List对象缓存在 Redis 列表中,将HashSet对象缓存在 Redis 集中等。如果您的值是字符串/整数/浮点数,则甚至不需要序列化
  2. 向/从多个服务器/线程发布/订阅。
  3. C# 后台服务/调度程序可以受益于维护 Redis 列表中的任务或对象,并使用 Redis 的blPop API 获取事件触发器。
  4. 使用 Redis 的sorted sets 维护“前 10”、“后 10”项目等。

但归根结底,这一切都取决于您的用例。

于 2014-04-07T07:51:10.533 回答