Redis相较于C#字典的优势

12
我想知道Redis及其C#客户端相比于Dictionary/ConcurrentDictionary的优势在哪里,以及何时使用Redis被认为是过度设计。
谢谢。

我想学习如何使用Redis,以及它相对于常规内存中的C#对象有哪些优势,这并不意味着要在这两者之间进行一对一的较量。 - Aviran Cohen
是的,但你知道这类问题最终会在SO上以主观答案结束,因此要么你有一个明确的问题要问,要么你将得不到任何答案或者它会被关闭。 - aybe
@Ofer Zelig的回答有帮助吗? - erexo
2个回答

22

Redis可能对于本地、单机应用程序来说会有些过度。特别是当数据不是很大的时候。

它主要用作L2缓存层。比如说,如果你有多台机器为你的应用程序提供服务,每台机器可以持有自己的本地缓存,并且Redis可以作为所有机器的全局缓存。

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

您可以在这里阅读更多关于此的内容。

话虽如此,Redis除了作为缓存之外还有更多的用途-发布/订阅功能,SETSORTED SET以及它们上面的功能(如交集,联合等),甚至是针对STRING类型的智能功能,如位运算。


@Aviran Cohen,我的回答有帮到你吗? - Ofer Zelig
@Aviran Cohen? - Ofer Zelig
@Aviran Cohen? - Ofer Zelig

6
作为您已经知道的,使用Redis进行服务器内缓存将是一种过度设计。
但在C#中与分布式应用程序一起使用Redis肯定具有一些优点(以下所有操作都是线程安全的):
1. 您可以在C#中构建自定义ORM包装器,使得可以无缝访问来自另一个服务器的.NET对象。您可以将您的Dictionary对象缓存在Redis哈希中,您的List对象在Redis列表中,您的HashSet对象在Redis集合等中。如果您的值是字符串/整数/浮点数,则无需序列化
2. 向/从多个服务器/线程发布/订阅。
3. C#后台服务/调度程序可以受益于在Redis列表中维护任务或对象,并使用Redis的blPop API获取事件触发器。
4. 使用Redis的sorted set维护“前10个”、“底部10个”项目等。
但归根结底,这都取决于您的用例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接