sql >> Database teknologi >  >> NoSQL >> Redis

hvordan man holder cachen opdateret

Da du bruger en cache, skal du tolerere datainkonsistensproblemet , dvs. på et tidspunkt, er data i cachen anderledes end data i databasen.

Du behøver ikke at opdatere værdien i cachen, når værdien er blevet ændret. Ellers vil hele cachesystemet være meget kompliceret (f.eks. skal du vedligeholde en liste over nøgler, der er blevet cache), og det kan også være unødvendigt at gøre det (f.eks. kan nøgleværdien kun bruges én gang, og det er ikke nødvendigt at for at opdatere det mere).

Hvordan kan vi opdatere dataene i cachen og holde cachesystemet enkelt?

Udover at indstille eller opdatere et nøgleværdi-par i cachen, indstiller vi normalt en TIMEOUT for hver tast . Derefter kan klienten hente nøgleværdi-parret fra cachen. Men hvis en nøgle når timeout, fjerner cachesystemet nøgleværdi-parret fra cachen. Dette kaldes THE KEY HAS BEEN EXPIRED . Næste gang vil klienten, der prøver at hente nøglen fra cachen, intet få. Dette kaldes CACHE MISS . I dette tilfælde skal klienten hente nøgleværdi-parret fra databasen og opdatere det til cache med en ny timeout.

Hvis dataene er blevet opdateret i databasen, mens nøglen IKKE er udløbet i cachen, vil klienten få inkonsistente data. Men når nøglen er udløbet, vil dens værdi blive hentet fra databasen og indsat i cachen af ​​en klient. Derefter vil andre klienter få opdaterede data, indtil dataene er blevet ændret igen.

Hvordan indstilles timeout?

Normalt er der to slags udløbspolitikker:

  1. Udløb om N sekunder/minutter/timer...
  2. Udløber på et fremtidigt tidspunkt, f.eks. udløber 2017/7/30 00:00:00

En stor timeout kan i høj grad reducere belastningen af ​​databasen, mens dataene kan være forældede i lang tid. En lille timeout kan holde dataene opdaterede så meget som muligt, mens databasen vil have en stor belastning. Så du skal balancere afvejningen, når du designer timeouten .

Hvordan udløber Redis-nøgler?

Redis har to måder at udløbe nøgler på:

  1. Når klienten forsøger at betjene en nøgle, kontrollerer Redis, om nøglen har nået timeout. Hvis den gør det, fjerner Redis nøglen og opfører sig, som om nøglen ikke eksisterer. På denne måde sikrer Redis, at klienten ikke får udløbne data.
  2. Redis har også en udløbstråd, der sampler nøgler ved en konfigureret frekvens. Hvis tasterne når timeout, fjerner Redis disse nøgler. På denne måde kan Redis fremskynde nøgleudløbsprocessen.


  1. Hvad er nyt i MongoDB 4.2

  2. Dokument Læs og indsæt med låsning/transaktion i nodejs med mongodb

  3. Indlæsning af partialer mislykkes på serveren JS

  4. Hvorfor fejler mine MongooseJS ObjectIds lighedstesten?