2014-04-06 21 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'等物品。

但在一天結束時,這一切都取決於您的使用情況。