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ą odbywać się w czasie rzeczywistym.
Czy ktoś miał takie problemy?
Odpowiedzi:
Redis jest idealny do przechowywania sesji. Wszystkie operacje są wykonywane w pamięci, więc odczyty i zapisy będą szybkie.
Drugim aspektem jest trwałość stanu sesji. Redis zapewnia dużą elastyczność w utrzymywaniu stanu sesji na dysku twardym. Możesz przejść na stronę http://redis.io/topics/persistence, aby dowiedzieć się więcej, ale na wyższym poziomie są dostępne opcje -
appendfsync always
w swoim pliku konfiguracyjnym. Dzięki temu Redis gwarantuje, że wszelkie operacje zapisu są zapisywane na dysku. Wadą jest to, że operacje zapisu będą wolniejsze.appendfsync everysec
. Zapewni to doskonałą wydajność z rozsądnymi gwarancjami danychźródło
Zasadniczo dostępne są dwa główne typy: asynchroniczne snapsnots i
fsync()
. Nazywają się odpowiednio RDB i AOF. Więcej o trybach trwałości na oficjalnej stronie .Obsługa sygnału zdemonizowanego procesu synchronizuje się z dyskiem, na przykład po otrzymaniu SIGTERM, więc dane nadal tam będą po ponownym uruchomieniu. Myślę, że demon lub system operacyjny musi ulec awarii, zanim zobaczysz uszkodzenie integralności, nawet przy ustawieniach domyślnych (migawki RDB).
Ustawienie AOF używa pliku Append Only, który rejestruje polecenia odbierane przez serwer i odtwarza bazę danych od podstaw przy zimnym starcie z zapisanego pliku. Domyślną zasadą synchronizacji dysku jest opróżnianie co sekundę (IIRC), ale można ją ustawić na blokowanie i zapisywanie przy każdym poleceniu.
Korzystanie zarówno z migawek, jak i dziennika przyrostowego wydaje się oferować zarówno długoterminowe podejście `` nie przejmuj się, jeśli przegapię-kilka sekund-danych '' z bezpieczniejszym, ale kosztowniejszym dziennikiem przyrostowym. Redis obsługuje klastrowanie po wyjęciu z pudełka, więc wydaje się, że można wykonać replikację.
Sam używam domyślnego ustawienia RDB i zapisuję migawki na zdalnym serwerze FTP. Nie widziałem jeszcze awarii powodującej utratę danych. Najprawdopodobniej ostra awaria sprzętu lub przerwy w zasilaniu, ale jestem hostowany na VPS. Mała szansa na to :)
źródło
To pytanie dotyczy tak naprawdę sesji w czasie rzeczywistym i wydaje się, że powstało częściowo z powodu niezrozumienia wyrażenia „operacje zapisu z opóźnieniem”. Chociaż szczegóły zostały ostatecznie wyjawione w komentarzach, chciałem tylko, aby było to bardzo jasne. ..
Nie będziesz mieć problemów z implementacją sesji w czasie rzeczywistym.
Redis to magazyn wartości klucza w pamięci z opcjonalnym utrwalaniem na dysku. „Operacje opóźnionego zapisu” odnoszą się do zapisów na dysku , a nie ogólnie do bazy danych, która istnieje w pamięci. Jeśli USTAWISZ parę klucz / wartość, możesz ją ODZYSKAĆ natychmiast (tj. W czasie rzeczywistym). Polityka, którą wybierzesz w odniesieniu do trwałości (o ile opóźnisz zapisy) określi górną granicę ilości danych, które mogą zostać utracone w wyniku awarii.
źródło