Rozumiem, że Redis obsługuje wszystkie dane z pamięci, ale czy utrzymuje się również po ponownym uruchomieniu serwera, tak że po ponownym uruchomieniu serwera wczytuje do pamięci wszystkie dane z dysku. A może zawsze jest to pusty magazyn, który służy tylko do przechowywania danych, gdy aplikacje działają bez trwałości?
122
Odpowiedzi:
Proponuję przeczytać o tym na http://redis.io/topics/persistence . Zasadniczo tracisz gwarantowaną trwałość, gdy zwiększasz wydajność, używając tylko przechowywania w pamięci. Wyobraź sobie scenariusz, w którym WSTAWISZ do pamięci, ale zanim utraci moc, spowoduje utratę zasilania. Nastąpi utrata danych.
Redis obsługuje tak zwane „migawki”. Oznacza to, że będzie robił pełną kopię tego, co jest w pamięci w pewnym momencie (np. Co pełną godzinę). Gdy stracisz zasilanie między dwoma migawkami, utracisz dane z czasu między ostatnią migawką a awarią (nie musi to być przerwa w zasilaniu ..). Redis porównuje bezpieczeństwo danych z wydajnością, tak jak robi to większość baz danych NoSQL.
Większość baz danych NoSQL opiera się na koncepcji replikacji między wieloma węzłami, aby zminimalizować to ryzyko. Redis jest uważany za bardziej szybką pamięć podręczną zamiast bazy danych, która gwarantuje spójność danych. Dlatego jego przypadki użycia zazwyczaj różnią się od tych, które występują w prawdziwych bazach danych: możesz na przykład przechowywać sesje, liczniki wydajności lub cokolwiek innego z niezrównaną wydajnością i bez rzeczywistych strat w przypadku awarii. Ale przetwarzanie zamówień / historii zakupów i tak dalej jest uważane za zadanie dla tradycyjnych baz danych.
źródło
Serwer Redis od czasu do czasu zapisuje wszystkie swoje dane na dysku twardym, zapewniając w ten sposób pewien poziom trwałości.
Zapisuje dane w jednym z następujących przypadków:
BGSAVE
polecenieAle dane w redis nie są tak naprawdę trwałe, ponieważ:
BGSAVE
operację można wykonać tylko wtedy, gdy masz wystarczającą ilość wolnej pamięci RAM (ilość dodatkowej pamięci RAM jest równa rozmiarowi redis DB)Uwaga:
BGSAVE
zapotrzebowanie na pamięć RAM jest prawdziwym problemem, ponieważ redis kontynuuje pracę, dopóki nie będzie więcej pamięci RAM do uruchomienia, ale przestaje zapisywać dane na HDD znacznie wcześniej (przy około 50% pamięci RAM).Aby uzyskać więcej informacji, zobacz trwałość Redis .
źródło
To kwestia konfiguracji. Możesz mieć brak, częściową lub pełną trwałość swoich danych w Redis. Najlepsza decyzja zostanie podjęta w oparciu o techniczne i biznesowe potrzeby projektu.
Zgodnie z dokumentacją Redis dotyczącą trwałości można skonfigurować instancję tak, aby zapisywała dane na dysku od czasu do czasu lub przy każdym zapytaniu, w skrócie. Zapewniają dwie strategie / metody AOF i RDB (przeczytaj dokumentację, aby zobaczyć szczegóły na ich temat), możesz używać każdej z nich samodzielnie lub razem.
Jeśli chcesz mieć „trwałość podobną do SQL”, powiedzieli:
źródło
Generalnie odpowiedź brzmi tak , jednak pełniejsza odpowiedź naprawdę zależy od rodzaju danych, które próbujesz przechowywać. Ogólnie rzecz biorąc, bardziej kompletna krótka odpowiedź brzmi:
Powiedziawszy to, Redis domyślnie będzie utrwalać migawki danych w okresowych odstępach czasu (najwyraźniej co 1 minutę, ale tego nie weryfikowałem - jest to opisane w poniższym artykule, który jest dobrym podstawowym wprowadzeniem):
http://qnimate.com/redis-permanent-storage/
TL; DR
Z oficjalnych dokumentów :
Redis musi być jawnie skonfigurowany pod kątem trwałości AOF, jeśli jest to wymagane, co spowoduje spadek wydajności, a także wzrost dzienników. Może to wystarczyć do stosunkowo niezawodnego utrzymywania ograniczonej ilości przepływu danych.
źródło
Możesz zrezygnować z trwałości w ogóle. Lepsza wydajność, ale wszystkie dane tracą podczas zamykania Redis.
Redis ma dwa mechanizmy trwałości: RDB i AOF.RDB używa globalnego snapshooting harmonogramu, a AOF zapisuje aktualizację do pliku dziennika tylko apappend, podobnego do MySql.
Możesz użyć jednego z nich lub obu, a po ponownym uruchomieniu Redis konstruuje dane z odczytu pliku RDB lub pliku AOF.
źródło