Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Memcached kontra Redis?

Podsumowanie (TL;DR)

Zaktualizowano 3 czerwca 2017 r.

Redis jest potężniejszy, bardziej popularny i lepiej obsługiwany niż memcached. Memcached może zrobić tylko niewielką część tego, co może zrobić Redis. Redis jest lepszy nawet tam, gdzie ich funkcje się pokrywają.

Jeśli potrzebujesz czegoś nowego, użyj Redis.

Memcached vs Redis:bezpośrednie porównanie

Oba narzędzia to potężne, szybkie magazyny danych w pamięci, które są przydatne jako pamięć podręczna. Oba mogą przyspieszyć działanie aplikacji poprzez buforowanie wyników bazy danych, fragmentów HTML lub czegokolwiek innego, czego wygenerowanie może być kosztowne.

Wskazówki do rozważenia

Gdy są używane do tego samego, oto jak są porównywane przy użyciu „Wskazówek do rozważenia” w pierwotnym pytaniu:

  • Szybkość odczytu/zapisu :Obie są niezwykle szybkie. Testy porównawcze różnią się w zależności od obciążenia, wersji i wielu innych czynników, ale generalnie pokazują, że redis jest tak szybki lub prawie tak szybki, jak memcached. Polecam redis, ale nie dlatego, że memcached jest wolny. Nie jest.
  • Wykorzystanie pamięci :Redis jest lepszy.
    • memcached:Określasz rozmiar pamięci podręcznej, a podczas wstawiania elementów demon szybko rośnie do nieco większego rozmiaru. Tak naprawdę nigdy nie ma sposobu na odzyskanie tego miejsca, poza ponownym uruchomieniem memcached. Wszystkie twoje klucze mogą stracić ważność, możesz opróżnić bazę danych i nadal będzie ona używać pełnego fragmentu pamięci RAM, z którą ją skonfigurowałeś.
    • redis:Ustawienie maksymalnego rozmiaru zależy od Ciebie. Redis nigdy nie zużyje więcej niż to konieczne i przywróci pamięć, której już nie używa.
    • Zapisałem 100 000 ~2KB ciągów (~200MB) losowych zdań w obu. Wykorzystanie pamięci RAM w pamięci Memcached wzrosło do ~225 MB. Użycie pamięci RAM Redis wzrosło do ~228 MB. Po spłukaniu obu, redis spadł do ~29MB, a pamięć podręczna pozostała na ~225MB. Są one podobnie wydajne w przechowywaniu danych, ale tylko jeden jest w stanie je odzyskać.
  • Zrzucanie we/wy dysku :Wyraźna wygrana dla redis, ponieważ robi to domyślnie i ma bardzo konfigurowalną trwałość. Memcached nie ma mechanizmów do zrzucania na dysk bez narzędzi innych firm.
  • Skalowanie :Oba zapewniają mnóstwo miejsca, zanim będziesz potrzebować więcej niż jednej instancji jako pamięci podręcznej. Redis zawiera narzędzia, które pomogą Ci wyjść poza to, podczas gdy memcached tego nie robi.

w pamięci podręcznej

Memcached to prosty, ulotny serwer pamięci podręcznej. Pozwala na przechowywanie par klucz/wartość, w których wartość jest ograniczona do ciągu do 1 MB.

Jest w tym dobry, ale to wszystko, co robi. Możesz uzyskać dostęp do tych wartości za pomocą ich klucza z bardzo dużą prędkością, często nasycając dostępną sieć, a nawet przepustowość pamięci.

Po ponownym uruchomieniu memcached dane znikną. To jest dobre dla pamięci podręcznej. Nie powinieneś tam przechowywać niczego ważnego.

Jeśli potrzebujesz wysokiej wydajności lub wysokiej dostępności, dostępne są narzędzia, produkty i usługi innych firm.

ponowne

Redis może wykonywać te same zadania, co memcached i może je wykonywać lepiej.

Redis może również działać jako pamięć podręczna. Może również przechowywać pary klucz/wartość. W wersji redis mogą one mieć nawet do 512 MB.

Możesz wyłączyć trwałość i szczęśliwie straci również dane po ponownym uruchomieniu. Jeśli chcesz, aby pamięć podręczna przetrwała ponowne uruchomienie, możesz to również zrobić. W rzeczywistości jest to ustawienie domyślne.

Jest też bardzo szybki, często ograniczony przepustowością sieci lub pamięci.

Jeśli jedno wystąpienie redis/memcached nie zapewnia wystarczającej wydajności dla Twojego obciążenia, redis jest oczywistym wyborem. Redis obejmuje obsługę klastrów i jest dostarczany z narzędziami wysokiej dostępności (redis-sentinel) „w pudełku”. W ciągu ostatnich kilku lat redis wyłonił się również jako wyraźny lider w narzędziach innych firm. Firmy takie jak Redis Labs, Amazon i inne oferują wiele przydatnych narzędzi i usług Redis. Ekosystem wokół redis jest znacznie większy. Liczba wdrożeń na dużą skalę jest teraz prawdopodobnie większa niż w przypadku memcached.

Nadzbiór Redis

Redis to coś więcej niż pamięć podręczna. Jest to serwer struktury danych w pamięci. Poniżej znajdziesz krótki przegląd rzeczy, które Redis może zrobić poza zwykłą pamięcią podręczną klucza/wartości, taką jak memcached. Większość funkcji redis to rzeczy, których memcached nie może zrobić.

Dokumentacja

Redis jest lepiej udokumentowany niż memcached. Chociaż może to być subiektywne, wydaje się, że przez cały czas jest coraz bardziej prawdziwe.

redis.io to fantastyczny, łatwy w nawigacji zasób. Pozwala wypróbować redis w przeglądarce, a nawet daje interaktywne przykłady na żywo z każdym poleceniem w dokumentacji.

Jest teraz 2x więcej wyników przepełnienia stosu dla redis niż w przypadku memcached. 2x więcej wyników Google. Bardziej dostępne przykłady w większej liczbie języków. Bardziej aktywny rozwój. Bardziej aktywny rozwój klienta. Te pomiary mogą nie znaczyć wiele indywidualnie, ale w połączeniu dają jasny obraz, że wsparcie i dokumentacja dla redis jest większa i znacznie bardziej aktualna.

Wytrwałość

Domyślnie redis utrzymuje dane na dysku za pomocą mechanizmu zwanego migawkami. Jeśli masz wystarczającą ilość dostępnej pamięci RAM, możesz zapisać wszystkie dane na dysku prawie bez pogorszenia wydajności. To prawie za darmo!

W trybie migawki istnieje szansa, że ​​nagła awaria może spowodować utratę niewielkiej ilości danych. Jeśli absolutnie musisz upewnić się, że żadne dane nigdy nie zostaną utracone, nie martw się, redis ma również twoje plecy z trybem AOF (tylko dołączanie plików). W tym trybie trwałości dane mogą być synchronizowane z dyskiem tak, jak są zapisywane. Może to zmniejszyć maksymalną przepustowość zapisu do szybkości zapisu na dysku, ale nadal powinno być dość szybkie.

Istnieje wiele opcji konfiguracyjnych, które pozwalają dostroić trwałość, jeśli zajdzie taka potrzeba, ale wartości domyślne są bardzo rozsądne. Te opcje ułatwiają skonfigurowanie redis jako bezpiecznego, nadmiarowego miejsca do przechowywania danych. To jest prawdziwe baza danych.

Wiele typów danych

Memcached jest ograniczony do ciągów, ale Redis jest serwerem struktury danych, który może obsługiwać wiele różnych typów danych. Zawiera również polecenia, których potrzebujesz, aby jak najlepiej wykorzystać te typy danych.

Ciągi (polecenia)

Proste wartości tekstowe lub binarne, które mogą mieć rozmiar do 512 MB. Jest to jedyny udział typu danych redis i memcached, chociaż ciągi memcached są ograniczone do 1 MB.

Redis zapewnia więcej narzędzi do wykorzystania tego typu danych, oferując polecenia do operacji bitowych, manipulacji na poziomie bitów, obsługi zwiększania/zmniejszania liczby zmiennoprzecinkowej, zapytań o zakres i operacji wieloklawiszowych. Memcached tego nie obsługuje.

Ciągi są przydatne we wszystkich rodzajach przypadków użycia, dlatego memcached jest całkiem przydatny w przypadku samego tego typu danych.

Hasze (polecenia)

Skróty są czymś w rodzaju magazynu wartości klucza w magazynie wartości klucza. Odwzorowują między polami znakowymi a wartościami znakowymi. Field->mapy wartości wykorzystujące hash są nieco bardziej wydajne niż mapy klucza->wartości przy użyciu zwykłych ciągów.

Hasze są przydatne jako przestrzeń nazw lub gdy chcesz logicznie pogrupować wiele kluczy. Dzięki hashowi możesz skutecznie pobrać wszystkich członków, wygasnąć wszystkich członków razem, usunąć wszystkich członków razem itp. Świetne w każdym przypadku użycia, w którym masz kilka par klucz/wartość, które należy pogrupować.

Jednym z przykładów użycia skrótu jest przechowywanie profili użytkowników między aplikacjami. Skrót redis przechowywany z identyfikatorem użytkownika jako kluczem umożliwia przechowywanie tylu bitów danych o użytkowniku, ile potrzeba, przy jednoczesnym przechowywaniu ich pod jednym kluczem. Zaletą używania skrótu zamiast serializacji profilu do ciągu znaków jest to, że różne aplikacje mogą odczytywać/zapisywać różne pola w profilu użytkownika bez martwienia sięże jedna aplikacja zastąpi zmiany wprowadzone przez inne (co może się zdarzyć, jeśli serializujesz nieaktualne dane).

Listy (polecenia)

Listy Redis to uporządkowane kolekcje ciągów. Są zoptymalizowane pod kątem wstawiania, odczytywania lub usuwania wartości z góry lub z dołu (czyli z lewej lub prawej strony) listy.

Redis zapewnia wiele poleceń do wykorzystywania list, w tym polecenia do wypychania/wyskakiwania elementów, wypychania/wyskakiwania między listami, obcinania list, wykonywania zapytań o zakres itp.

Listy tworzą bardzo trwałe, atomowe kolejki. Działają one doskonale w przypadku kolejek zadań, dzienników, buforów i wielu innych przypadków użycia.

Zestawy (polecenia)

Zestawy to nieuporządkowane kolekcje o unikalnych wartościach. Są zoptymalizowane, aby umożliwić szybkie sprawdzenie, czy wartość znajduje się w zestawie, szybkie dodawanie/usuwanie wartości oraz mierzenie nakładania się z innymi zestawami.

Są świetne do takich rzeczy, jak listy kontroli dostępu, unikalne narzędzia do śledzenia odwiedzających i wiele innych. Większość języków programowania ma coś podobnego (zwykle nazywanego zestawem). To jest tak, tylko rozpowszechniane.

Redis udostępnia kilka poleceń do zarządzania zestawami. Oczywiste, takie jak dodawanie, usuwanie i sprawdzanie zestawu są obecne. Podobnie jak mniej oczywiste polecenia, takie jak otwieranie/odczytywanie losowego elementu oraz polecenia wykonywania połączeń i przecinania z innymi zestawami.

Posortowane zestawy (polecenia)

Sorted Sets to także kolekcje o unikalnych wartościach. Te, jak sama nazwa wskazuje, są uporządkowane. Są one uporządkowane według punktów, a następnie leksykograficznie.

Ten typ danych jest zoptymalizowany pod kątem szybkiego wyszukiwania według wyniku. Uzyskanie najwyższej, najniższej lub dowolnego zakresu wartości pomiędzy nimi jest niezwykle szybkie.

Jeśli dodasz użytkowników do posortowanego zestawu wraz z ich wysokim wynikiem, masz idealną tablicę wyników. Gdy pojawią się nowe najlepsze wyniki, po prostu dodaj je ponownie do zestawu z ich wysokim wynikiem, a zmieni się kolejność Twojej tabeli liderów. Świetnie nadaje się również do śledzenia czasu ostatniej wizyty użytkowników i tego, kto jest aktywny w Twojej aplikacji.

Przechowywanie wartości z tą samą punktacją powoduje, że są one uporządkowane leksykograficznie (myśl alfabetycznie). Może to być przydatne w przypadku funkcji autouzupełniania.

Wiele z posortowanych poleceń dotyczących zestawów jest podobnych do poleceń dotyczących zestawów, czasami z dodatkowym parametrem oceny. Dołączone są również polecenia do zarządzania punktacjami i zapytania według punktacji.

Geo

Redis ma kilka poleceń do przechowywania, pobierania i mierzenia danych geograficznych. Obejmuje to zapytania o promienie i pomiary odległości między punktami.

Technicznie rzecz biorąc, dane geograficzne w redis są przechowywane w posortowanych zestawach, więc nie jest to naprawdę osobny typ danych. Jest to raczej rozszerzenie na posortowane zestawy.

Bitmapa i HyperLogLog

Podobnie jak geo, nie są to całkowicie oddzielne typy danych. Są to polecenia, które pozwalają traktować dane ciągów tak, jakby były bitmapą lub hiperlogiem.

Bitmapy to te, do których odwoływałem się w Strings są dla. Ten typ danych był podstawowym elementem konstrukcyjnym ostatniego wspólnego projektu artystycznego reddita:r/Place.

HyperLogLog pozwala na użycie stałej, bardzo małej ilości miejsca do zliczania prawie nieograniczonej liczby unikalnych wartości z szokującą dokładnością. Używając tylko ~16 KB, możesz skutecznie policzyć liczbę unikalnych użytkowników Twojej witryny, nawet jeśli jest to liczba w milionach.

Transakcje i atomowość

Polecenia w redis są niepodzielne, co oznacza, że ​​możesz mieć pewność, że gdy tylko zapiszesz wartość do redis, ta wartość będzie widoczna dla wszystkich klientów połączonych z redis. Nie trzeba czekać na propagację tej wartości. Z technicznego punktu widzenia memcached jest również atomowy, ale dzięki redis dodając całą tę funkcjonalność poza memcached, warto zauważyć i nieco imponujące, że wszystkie te dodatkowe typy danych i funkcje są również atomowe.

Chociaż nie do końca to samo, co transakcje w relacyjnych bazach danych, redis ma również transakcje, które wykorzystują „optymistyczne blokowanie” (OBSERWUJ/WIELE/EXEC).

Rurociągi

Redis udostępnia funkcję zwaną „potokiem”. Jeśli masz wiele poleceń redis, które chcesz wykonać, możesz użyć potoku, aby wysłać je do redis za jednym razem, a nie pojedynczo.

Zwykle, gdy wykonujesz polecenie na redis lub memcached, każde polecenie jest oddzielnym cyklem żądania/odpowiedzi. Dzięki potoku redis może buforować kilka poleceń i wykonywać je wszystkie jednocześnie, odpowiadając wszystkimi odpowiedziami na wszystkie polecenia w jednej odpowiedzi.

Dzięki temu możesz osiągnąć jeszcze większą przepustowość importowania zbiorczego lub innych działań wymagających wielu poleceń.

Pub/Sub

Redis posiada polecenia dedykowane do funkcji pub/sub, dzięki czemu redis może działać jako szybki nadawca wiadomości. Dzięki temu pojedynczy klient może publikować wiadomości do wielu innych klientów podłączonych do kanału.

Redis obsługuje pub/sub, jak również prawie każde narzędzie. Dedykowani brokerzy wiadomości, tacy jak RabbitMQ, mogą mieć zalety w niektórych obszarach, ale fakt, że ten sam serwer może również zapewnić trwałe, trwałe kolejki i inne struktury danych, których prawdopodobnie potrzebują Twoje obciążenia pub/sub, Redis często okazuje się najlepszym i najprostszym narzędziem do pracy.

Skrypty Lua

Możesz myśleć o skryptach lua jak o własnym języku SQL lub procedurach składowanych. To zarówno więcej, jak i mniej, ale analogia w większości działa.

Być może masz złożone obliczenia, które chcesz wykonać przez redis. Być może nie stać Cię na wycofywanie transakcji i potrzebujesz gwarancji, że każdy etap złożonego procesu zostanie zrealizowany w sposób atomowy. Te i wiele innych problemów można rozwiązać za pomocą skryptów lua.

Cały skrypt jest wykonywany atomowo, więc jeśli potrafisz dopasować swoją logikę do skryptu lua, często możesz uniknąć bałaganu z optymistycznymi transakcjami blokującymi.

Skalowanie

Jak wspomniano powyżej, redis zawiera wbudowaną obsługę klastrowania i jest w pakiecie z własnym narzędziem wysokiej dostępności o nazwie redis-sentinel .

Wniosek

Bez wahania poleciłbym redis zamiast memcached dla wszelkich nowych projektów lub istniejących projektów, które jeszcze nie używają memcached.

Powyższe może brzmieć, jakbym nie lubił memcached. Wręcz przeciwnie:to potężne, proste, stabilne, dojrzałe i utwardzone narzędzie. Są nawet przypadki użycia, w których jest trochę szybszy niż redis. Kocham memcached. Po prostu uważam, że nie ma to większego sensu dla przyszłego rozwoju.

Redis robi wszystko, co robi memcached, często lepiej. Jakakolwiek przewaga wydajności dla memcached jest niewielka i zależy od obciążenia. Istnieją również obciążenia, dla których redis będzie szybszy, i wiele innych obciążeń, które redis może wykonać, a których memcached po prostu nie może. Niewielkie różnice w wydajności wydają się niewielkie w obliczu ogromnej przepaści w funkcjonalności oraz faktu, że oba narzędzia są tak szybkie i wydajne, że mogą być ostatnim elementem infrastruktury, o który będziesz musiał się martwić skalowaniem.

Jest tylko jeden scenariusz, w którym memcached ma więcej sensu:gdzie memcached jest już używany jako pamięć podręczna. Jeśli już buforujesz za pomocą memcached, używaj go dalej, jeśli spełnia Twoje potrzeby. Przejście na redis prawdopodobnie nie jest warte wysiłku, a jeśli zamierzasz używać redis tylko do buforowania, może to nie oferować wystarczających korzyści, aby były warte twojego czasu. Jeśli memcached nie spełnia Twoich potrzeb, prawdopodobnie powinieneś przejść na redis. Dzieje się tak niezależnie od tego, czy potrzebujesz skalować poza memcached, czy potrzebujesz dodatkowej funkcjonalności.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bóg plik konfiguracyjny do monitorowania istniejących procesów?

  2. jak przechowywać złożony obiekt w redis (za pomocą redis-py)

  3. Uzyskaj dostęp do zadokowanego redis z hosta systemu Windows

  4. Jak sprawić, by Redis wybrał politykę eksmisji LRU tylko dla niektórych kluczy?

  5. Posortowany zestaw o stałym rozmiarze w Redis?