2014-04-06 18 views
5

Zastanawiam się, jakie korzyści z Redis z jego klienta C# ponad słownik/ConcurrentDictionary i inne.Korzyści Redis ponad C# Słownik

Nie jestem pewien, czy użycie redisu jest uważane za nadmierne w przypadku przechowywania słownika.

Dzięki.

+0

1/Dlaczego nie dowiesz się, próbując? 2/Takie ogólne pytanie prawdopodobnie bardziej pasuje do http://programmers.stackexchange.com/. – Aybe

+0

Chcę się dowiedzieć, w jaki sposób należy używać redis i jakie są jego zalety w stosunku do zwykłego obiektu pamięciowego C#, który nie jest przeznaczony do walki na luzie między tymi dwoma elementami. –

+0

Tak, ale wiesz, jak te pytania kończą się słowem: odpowiedź subiektywna, więc albo masz dokładne pytanie, albo nie dostaniesz żadnej odpowiedzi, albo zostanie zamknięta. – Aybe

Odpowiedz

6

Redis jest prawdopodobnie przesadą dla lokalnej aplikacji typu "jeden komputer". Zwłaszcza, gdy dane nie są duże.

Jest używany głównie jako warstwa pamięci podręcznej L2. Powiedzmy, że masz wiele komputerów obsługujących twoją aplikację, każda maszyna może przechowywać własną lokalną pamięć podręczną, ale Redis może służyć jako globalna pamięć podręczna dla nich wszystkich. Załóżmy, że użytkownik Twojej aplikacji przegląda stronę lub funkcję wymagającą danych z Twojej bazy danych. Twoja aplikacja sprawdzi następnie swoją lokalną pamięć podręczną L1 (na przykład słownik). Byłaby to najszybsza metoda, ponieważ nie wiąże się z żadnym objazdem w sieci. Jeśli danych tam nie ma, będzie szukał go w Redis jako globalnej pamięci podręcznej aplikacji. Jeśli jest tam - świetnie - pobierz dane i umieść je w lokalnej pamięci podręcznej L1. Jeśli nie, przejdź do bazy danych, pobierz dane, umieść je w Redis (L2) iw lokalnej pamięci podręcznej (L1).

Możesz przeczytać więcej na ten temat here.

Mając na uwadze powyższe, istnieje więcej zwyczajów dla Redis inne niż zwykłe cache - Pub/Sub funkcjonalności, SET s, SORTED SET S i funkcji na nich (jak skrzyżowania, związków itp), a nawet inteligentne funkcje na STRING typów, takich jako operacje bitowe.

+0

@Airiran Cohen, czy moja odpowiedź ci pomogła? –

2

Jak już wiesz, użycie Redis do buforowania w serwerze spowodowałoby przesadę.

Ale używając Redis z C# w aplikacji rozproszonej zdecydowanie oferuje pewne korzyści (wszystkie z poniższych operacji są thread-safe):

  1. Można zbudować niestandardowy ORM wrapper dla projektu w C# tak aby twoje obiekty .NET z jednego serwera mogły być łatwo dostępne z innego. Możesz buforować obiekty Dictionary w skrótach Redisa, obiektach List na listach Redis, obiektach HashSet w zestawie Redis itp. Jeśli twoje wartości są ciągami/ints/floats, nie ma potrzeby nawet serializacji!
  2. Publikowanie/subskrybowanie do/z wielu serwerów/wątków.
  3. Usługi/schedulery w tle C# mogą korzystać z utrzymywania zadań lub obiektów na listach Redis i otrzymywać wyzwalacze zdarzeń za pomocą interfejsu API Redis o numerze blPop.
  4. Zachowaj pozycje "top 10", "dolne 10" itp., Korzystając z usług Redis's sorted set s.

Ale pod koniec dnia wszystko zależy od twojego przypadku użycia.