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?
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 -
- 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. - 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
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:)
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.
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