2012-04-23 5 views
63

Aktualnie używam db (mysql) do przechowywania moich sesji. Działa świetnie, ale jest nieco powolny.Jak bezpieczne jest przechowywanie sesji z Redis?

Zostałem poproszony o skorzystanie z Redis, ale zastanawiam się, czy to dobre pomysły, ponieważ słyszałem, że Redis opóźnia operacje zapisu, więc trochę się boję, ponieważ sesje muszą być rzeczywistymi czasami.

Czy wystąpiły takie problemy?

+1

Ponieważ Redis twierdzi, że ma opcjonalną wytrzymałość, to powiedziałbym, że można go bezpiecznie użyć, jeśli zdecydujesz się na utrwalanie na HDD. Jednak w przypadku danych sesji - zdecydowanie zapisałbym je w pamięci RAM (co oznacza, że ​​nie przejmowałbym się częścią trwałości całej tej próby). Najgorsze, co powinno się zdarzyć w przypadku utraty danych sesji, jest wylogowanie użytkowników. –

+1

Tak, ale jest to część mojego wymogu, użytkownicy nie powinni się logować, ponieważ niektóre dane użytkowników są przechowywane w czasie sesji, gdy użytkownicy nie są zalogowani (goście-goście). Pobierają RAM Redis, ale z włączonym protokołowaniem i/lub kopią zapasową. Jeśli straciliśmy kilka sesji, jest to dopuszczalne. – Trent

+0

Cóż, jeśli używasz dysku twardego, jaki jest sens używania Redis? Prawdopodobnie opóźnia to faktyczne zatwierdzenie na dysku w celu zwiększenia wydajności, tak samo jak MySQL, jeśli jest skonfigurowany w ten sposób. Czy rozważałeś przeniesienie MySQL na szybszy podsystem I/O?To nie tak, że Redis będzie działał magicznie 50 razy szybciej na tym samym sprzęcie, jeśli musi korzystać z tych samych subsydiów we/wy. –

Odpowiedz

110

Redis jest idealny do przechowywania sesji. Wszystkie operacje są wykonywane w pamięci, a więc odczytywanie i zapisywanie będzie szybkie.

Drugi aspekt to utrzymywanie stanu sesji. Redis daje ci dużą elastyczność w utrzymywaniu stanu sesji na dysku twardym. Można przejść przez http://redis.io/topics/persistence aby dowiedzieć się więcej, ale na wysokim poziomie, tu są twoje opcje -

  1. Jeśli nie można sobie pozwolić na utratę żadnych sesji, zestaw appendfsync always w pliku konfiguracyjnym. 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 wszystko jest w porządku z utratą danych o wartości 1s, użyj appendfsync everysec. Zapewni to doskonałą wydajność i rozsądne gwarancje na dane.
9

Zasadniczo dostępne są dwa główne typy: asynchroniczne snapsnoty i fsync(). Nazywa się odpowiednio RDB i AOF. Więcej na temat persistence modes on the official page.

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

Ustawienie AOF używa pliku Append Only, który rejestruje polecenia, które otrzymuje serwer, i odtwarza bazę danych od początku przy zimnym starcie z zapisanego pliku. Domyślną zasadą synchronizacji dysków jest opróżnianie raz na sekundę (IIRC), ale można ustawić blokowanie i zapisywanie przy każdym poleceniu.

Obiema migawki i przyrostowe dziennik wydaje się oferować zarówno długoterminowe nie-umysł-if-I-miss-a-kilka-sekund-of-danych podejście z bardziej bezpieczne, ale kosztowne dziennik przyrostowy. Redis obsługuje tworzenie klastrów po wyjęciu z pudełka, więc replikacja może być wykonana, jak się wydaje.

Używam domyślnego ustawienia RDB i zapisuję migawki na zdalnym serwerze FTP. Nie widziałem jeszcze awarii, która spowodowała utratę danych. Ostra awaria sprzętu lub przerwy w zasilaniu najprawdopodobniej, ale jestem hostowany na VPS. Szczupła szansa, że ​​tak się dzieje :)