Redis je napredna baza podatkov ključ-vrednost. Podobno je kot memcached, vendar se podatki lahko ohranjajo in podatkovni tipi so bogati. Obstajajo nizi, povezani seznami, množice in urejene zbirke. Podpira izračun seštevanja, sekanja in dopolnjevanja (razlik) zbirk na strežniški strani, prav tako pa podpira različne funkcije razvrščanja. Tako lahko Redis vidimo tudi kot strežnik za podatkovne strukture. Vsi Redis podatki se shranijo v pomnilnik in nato občasno asinhrono shranijo na disk (to imenujemo "pol-persistentni način"); Vsako spremembo podatkov lahko zapišete tudi v datoteko Append Only File (AOF) (temu se reče "način popolne trajnosti"). Prva metoda je sfotografiranje datotek: privzeti redis bo podatke ohranil na disku v obliki posnetka (binarna datoteka, dump.rdb, to ime datoteke je mogoče določiti), format v konfiguracijski datoteki pa je: shrani N M pomeni, da bo redis v N sekundah posnel posnetek na disk, če pride do vsaj M sprememb v redisu. Seveda lahko ročno izvedemo tudi shranjevanje ali bgsave (asinhron) za izdelavo posnetkov.
Tukaj je kratek uvod v to, kako deluje: Ko mora Redis vztrajati, Redis razcepi podproces; Otroški proces zapiše podatke v začasno RDB datoteko na disk; Ko podproces zaključi pisanje začasne datoteke, zamenja izvirni RDB, ki ima prednost kopiranja ob pisanju
Obstaja tudi metoda trajnosti Append-only:filesnapshotting (Append-only:filesnapshotting). Ko je redis nenavadno mrtev, se nedavni podatki izgubijo (količina izgubljenih podatkov je odvisna od konfiguracije vaše politike shranjevanja), zato je to njena največja slabost – ko je poslovni obseg velik, je izgubljenih podatkov veliko. Metoda samo dodajanja lahko doseže vso izgubo podatkov, vendar je zmogljivost redisa slabša. AOF je mogoče ohraniti skozi celoten proces, vklopiti ga je treba le v konfiguracijski datoteki (privzeto je ne), samo dodano da. Ko je AOF omogočen, se vsakič, ko redis izvede ukaz za spremembo podatkov, doda v AOF datoteko, in ko se redis ponovno zažene, se AOF datoteka prebere za "ponovitev", ki se obnovi do zadnjega trenutka pred zaprtjem redisa.
Prepisovanje LOG: Ko se datoteka AOF povečuje, ko se podatki spreminjajo, se mnogi od njih spremenijo v ključu. Zato ima redis zanimivo funkcijo: rekonstruira AOF datoteko v ozadju, ne da bi vplival na operacijo na strani odjemalca. Izvajanje ukaza BGREWRITEAOF kadarkoli zapiše najkrajše zaporedje ukazov v trenutnem pomnilniku na disk, ti ukazi pa lahko popolnoma sestavijo trenutno podatkovno situacijo brez nepotrebnih sprememb (kot so spremembe stanja, spremembe števca itd.), s čimer se zmanjša velikost datoteke AOF. Torej, pri uporabi OF redis priporoča uporabo tudi BGREWRITEAOF.
Obstajajo trije načini za osvežitev AOF datoteke, glejte parameter konfiguracije appendfsync: appendfsync vedno pokliče fsync, da se vsakič, ko se odda ukaz za spremembo, izprazni v AOF datoteko, kar je zelo, zelo počasi, a tudi zelo varno; appendfsync everysec vsako sekundo kliče fsync, da hitro pokliče v AOF datoteko, vendar lahko podatke izgubi v eni sekundi; appendfsync se ne zanaša na osvežitev operacijskega sistema, redis ne osvežuje aktivno OV, kar je najhitrejše, vendar je varnost slaba. Privzeto je priporočena osveževanje na sekundo, da upoštevata tako hitrost kot varnost.
Morda je zaradi sistemskih razlogov AOF poškodovan, redis ne more več naložiti OF OV, lahko sledite spodnjim korakom za odpravo: Najprej naredite varnostno kopijo AOF datoteke in jo kopirajte na drugo mesto; Popravi izvirno OF datoteko, izvede: $redis-check-aof –fix; Lahko uporabiš ukaz diff–u, da vidiš, kje so datoteke neskladne pred in po popravilu. Ponovno zaženi storitev Redis.
Kako deluje LOG Rewrite: Enako uporablja copy-on-write: prvi redis bo razvejal podproces; Otroški proces zapiše najnovejši AOF v začasno datoteko; Starševski proces postopoma zapiše najnovejše izvedene spremembe v pomnilniku (v tem času je stari AOF še vedno zapisan in ga je varno prepisati, če ne uspe); Ko podrejeni proces zaključi prepisovanje začasne datoteke, starševski proces prejme signal in zapiše prejšnje inkrementalne spremembe v pomnilniku na konec začasne datoteke. Redis preimenuje staro OF datoteko, preimenuje začasno datoteko in začne pisati v novo OF.
Nazadnje, za vsak slučaj (računalnik ali disk), ne pozabite redno varnostno kopirati *rdb *.aof datoteke, ustvarjene z filesnapshottingom ali samo z dodajanjem, na oddaljeni računalnik. Uporabljam crontab za SCP vsakih pol ure. Nisem uporabil Redisove funkcije master-slave, ker bi morala polurna varnostna kopija povsem potrajati, poleg tega pa se mi zdi, da je to nekoliko zapravljanje stroja, če imaš master-slave. To je na koncu odvisno od aplikacije.
|