Jak bezpieczne jest przechowywanie sesji z Redis?

Obecnie używam MySql do przechowywania moich sesji. Działa świetnie, ale jest trochę powolny.

Poproszono mnie o użycie Redis, ale zastanawiam się, czy to dobry pomysł, ponieważ słyszałem, że Redis opóźnia operacje zapisu. Trochę się boję, bo sesje muszą być w czasie rzeczywistym.

Czy ktoś miał takie problemy?

Author: Jordan Dodson, 2012-04-23

3 answers

Redis jest idealny do przechowywania sesji. Wszystkie operacje wykonywane są w pamięci, więc odczyt i zapis będą szybkie.

Drugim aspektem jest trwałość stanu sesji. Redis zapewnia dużą elastyczność w sposobie utrzymywania stanu sesji na dysku twardym. Możesz przejść http://redis.io/topics/persistence aby dowiedzieć się więcej, ale na wysokim poziomie, oto twoje opcje -

  1. Jeśli nie możesz sobie pozwolić na utratę jakichkolwiek sesji, Ustaw appendfsync always w swoim plik konfiguracyjny. Dzięki temu Redis gwarantuje, że wszelkie operacje zapisu są zapisywane na dysku. Wadą jest to, że operacje zapisu będą wolniejsze.
  2. Jeśli nie masz nic przeciwko utracie danych o wartości 1s, użyj appendfsync everysec. Zapewni to doskonałą wydajność z rozsądnymi gwarancjami danych
 116
Author: Sripathi Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-23 11:22:34

Zasadniczo dostępne są dwa główne typy: async snapsnots i fsync(). Nazywane są odpowiednio RDB i AOF. Więcej o trybach trwałości na oficjalnej stronie.

Obsługa sygnału demonizowanego procesu synchronizuje się z dyskiem, gdy otrzymuje na przykład SIGTERM, więc dane będą tam nadal po ponownym uruchomieniu. Myślę, że Demon lub system operacyjny musi się zawiesić, zanim zobaczysz uszkodzenie integralności, nawet z ustawieniami domyślnymi (migawki RDB).

Ustawienie AOF używa tylko Pliku dołączonego, który rejestruje polecenia otrzymane przez serwer i odtwarza DB od podstaw przy zimnym starcie z zapisanego pliku. Domyślną zasadą synchronizacji dysku jest przepłukiwanie co sekundę (IIRC), ale można ustawić blokowanie i zapisywanie przy każdym poleceniu.

Korzystanie zarówno z migawek, jak i dziennika przyrostowego wydaje się oferować zarówno długoterminowe nie przejmuj się, jeśli-przegapię-kilka-sekund-danych podejście z bezpieczniejszym, ale kosztowniejszym dziennikiem przyrostowym. Redis wspiera klastrowanie z box, więc replikacja może być wykonana zbyt wydaje.

Sam używam domyślnego ustawienia RDB i zapisuję migawki na zdalnym FTP. Nie widziałem jeszcze awarii, która spowodowała utratę danych. Ostra awaria sprzętu lub przerwy w dostawie prądu najprawdopodobniej, ale jestem hostowany na VPS. Mała szansa na to, że tak się stanie:)

 11
Author: Morten Jensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-15 21:53:37

To pytanie jest naprawdę o sesje w czasie rzeczywistym, i wydaje się, że powstały częściowo z powodu nieporozumienia wyrażenia "opóźnione operacje zapisu", podczas gdy szczegóły zostały ostatecznie dokuczone w komentarzach, chciałem tylko, aby było to super-duper jasne...

Nie będziesz miał problemów z realizacją sesji w czasie rzeczywistym.

Redis jest zapisem w pamięci wartości klucza z opcjonalną trwałością na dysku. "Operacje opóźnionego zapisu" odnoszą się do zapisu na dysk , a nie ogólnie na bazę danych, która istnieje w pamięci. Jeśli ustawisz parę klucz / wartość, możesz ją uzyskać natychmiast (tzn. w czasie rzeczywistym). Wybrana zasada dotycząca trwałości (ile opóźni się zapis) określi górną granicę dla ilości danych, które mogą zostać utracone w przypadku awarii.

 2
Author: Jordan Dodson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 04:24:41