2014-04-06 20 views
5

我想知道Redis C#客户端在Dictionary/ConcurrentDictionary和其他方面的优点。Redis优于C#字典的好处

我不确定何时使用redis被认为是对字典存储的矫枉过正。

谢谢。

+0

1 /为什么你不通过尝试发现? 2 /像这样的一般问题可能更适合http://programmers.stackexchange.com/。 – Aybe

+0

我想了解如何使用redis,以及它在存储c#对象中的常规优势是什么,它并不意味着在这两者之间进行一对一的酒吧斗争。 –

+0

是的,但你知道这些类型的问题如何最终成为主观答案,所以要么你有一个确切的问题要问,要么你不会得到任何答案,否则将会被关闭。 – Aybe

回答

6

Redis可能是本地单机应用程序的矫枉过正。特别是当数据不大时。

它主要用作L2缓存层。假设你有多台服务器为你的应用程序提供服务,每台机器可以拥有自己的本地缓存,但是Redis可以作为全部缓存。假设您的应用的用户浏览到需要来自后端数据库的某些数据的页面或功能。然后,您的应用程序将检查其本地L1缓存(例如字典)。这将是最快的方法,因为它不涉及任何网络往返。如果数据不存在,它将在Redis中查找它作为全局应用程序缓存。如果它在那里 - 很好 - 获取数据并存入本地L1缓存。如果没有,转到数据库,获取数据,将其放入Redis(L2)和本地缓存(L1)中。

您可以在here上阅读更多信息。

话虽这么说,有更多的用途为Redis的不仅仅是高速缓存等 - 的Pub/Sub功能,SET S,SORTED SET S和功能上它们(如十字路口,工会等),甚至在STRING类型的智能功能,例如:作为按位操作。

+0

@Aviran Cohen,我的回答对你有帮助吗? –

2

正如您已经知道的,使用Redis进行服务器内缓存可能会导致矫枉过正。

但使用Redis的用C#在分布式应用无疑提供了一些好处(以下所有操作都是线程安全的):

  1. 您可以建立一个自定义的ORM包装在C#这样的项目您的一个服务器的.NET对象可以从另一个服务器无缝访问。您可以将您的Dictionary对象缓存在Redis哈希中,您的List对象位于Redis列表中,您的HashSet对象位于Redis中。如果您的值是字符串/整数/浮点数,则不需要连续编号
  2. 发布/订阅/从多个服务器/线程。
  3. C#后台服务/调度程序可受益于在Redis列表中维护任务或对象,并使用Redis的blPop API获取事件触发器。
  4. 使用Redis的sorted set s来维护'top 10','bottom 10'等物品。

但在一天结束时,这一切都取决于您的使用情况。