Redis este o bază de date avansată cheie-valoare. Este similar cu memcached, dar datele pot fi păstrate și tipurile de date sunt bogate. Există șiruri, liste legate, seturi și colecții ordonate. Suportă calcularea sumei, intersectării și completării (diferenței) colecțiilor pe partea de server și suportă, de asemenea, o varietate de funcții de sortare. Astfel, Redis poate fi văzut și ca un server de structuri de date. Toate datele Redis sunt stocate în memorie și apoi stocate pe disc asincron din când în când (acest lucru se numește "mod semi-persistent"); De asemenea, poți scrie fiecare modificare de date într-un fișier Append Only File (AOF) (acesta se numește "modul de persistență complet"). Prima metodă este fișiersnapshotting: redis implicit va păstra datele pe disc sub forma unui snapshot (un fișier binar, dump.rdb, acest nume de fișier poate fi specificat), iar formatul din fișierul de configurare este: save N M înseamnă că, în N secunde, redis va face snapshot pe disc dacă apar cel puțin M modificări în redis. Desigur, putem efectua manual save sau bgsave (asincron) pentru a face snapshot-uri.
Iată o scurtă introducere a modului în care funcționează: Când Redis trebuie să persiste, Redis va forka un proces copil; Procesul copil scrie datele într-un fișier RDB temporar pe disc; Când subprocesul termină de scris fișierul temporar, înlocuiește RDB-ul original, care are avantajul copy-on-write
Există și o metodă de persistență Append-only:filesnapshotting metoda Când redis este anormal de moartă, datele recente se vor pierde (cantitatea de date pierdute depinde de configurația politicii tale de salvare), deci acesta este cel mai mare dezavantaj al său: când volumul de afaceri este mare, datele pierdute sunt foarte mari. Metoda doar append-only poate realiza toate pierderile de date, dar performanța redis este mai slabă. AOF poate fi menținut pe tot parcursul procesului, trebuie doar să fie activat în fișierul de configurare (implicit este nu), doar aponzie da. După ce AOF este activat, de fiecare dată când redis execută o comandă pentru a modifica datele, acestea vor fi adăugate în fișierul AOF, iar când redis este repornit, fișierul AOF va fi citit pentru "replay" pentru a fi restaurat la ultimul moment înainte ca redis să fie închis.
Rescriere LOG Pe măsură ce fișierul AOF devine tot mai mare pe măsură ce datele sunt modificate, multe dintre acestea înregistrând modificări într-o cheie. Prin urmare, redis are o caracteristică interesantă: reconstruiește fișierul AOF în fundal fără a afecta operația pe partea clientului. Executarea comenzii BGREWRITEAOF în orice moment va scrie cea mai scurtă secvență de comenzi din memoria curentă pe disc, iar aceste comenzi pot construi complet situația actuală a datelor fără modificări inutile (cum ar fi schimbări de stare, schimbări de contoare etc.), reducând dimensiunea fișierului AOF. Așadar, când folosești OF, redis recomandă să folosești și BGREWRITEAOF.
Există trei moduri de a reîmprospăta fișierul AOF, consultă parametrul de configurare appendfsync: appendfsync apelează întotdeauna fsync pentru a se scăpa de fișierul AOF de fiecare dată când se trimite o comandă de modificare, ceea ce este foarte, foarte lent, dar și foarte sigur; appendfsync every ysec cheamă fsync la fiecare secundă pentru a se întoarce rapid în fișierul AOF, dar poate pierde date într-o secundă; appendfsync no se bazează pe sistemul de operare pentru a reîmprospăta, redis nu reîmprospătează activ OV-ul, care este cel mai rapid, dar securitatea este slabă. Reîmprospătarea pe secundă este recomandată implicit, astfel încât atât viteza, cât și securitatea să fie luate în considerare.
Poate fi din motive de sistem că AOF este corupt, Redis nu mai poate încărca acest OF OV, poți urma pașii de mai jos pentru a o rezolva: Mai întâi, fă o copie de rezervă a fișierului AOF și copiește-l în altă parte; Fixați fișierul original OF, executați: $redis-check-aof –fix; Poți folosi comanda diff –u pentru a vedea unde fișierele sunt inconsistente înainte și după reparare. Repornește serviciul Redis.
Cum funcționează LOG Rewrite: Același lucru folosește copy-on-write: primul redis va bifurca un proces copil; Procesul copil scrie cel mai recent AOF într-un fișier temporar; Procesul părinte scrie incremental cele mai recente modificări executate în memorie (în acest moment, vechiul AOF este încă scris și este sigur să fie rescris dacă eșuează); Când procesul copil termină de rescris fișierul temporar, procesul părinte primește un semnal și scrie modificările incrementale anterioare din memorie la sfârșitul fișierului temporar. Redis redenumește vechiul fișier OF, redenumește fișierul temporar și începe să scrie în noul OF.
În cele din urmă, în caz că (aparatul se blochează sau se blochează disc), amintește-ți să faci backup regulat al fișierului *rdb *.aof generat folosind filesnapshotting sau Append-only pe mașina de la distanță. Folosesc un crontab pentru SCP la fiecare jumătate de oră. Nu am folosit funcția master-slave a lui Redis, pentru că un backup de jumătate de oră ar trebui să fie în regulă, și simt că este puțin o risipă a mașinii dacă ai un master-slave. În cele din urmă, acest lucru depinde de aplicație.
|