sql >> Database >  >> NoSQL >> Redis

hoe de cache up-to-date te houden

Aangezien u een cache gebruikt, moet u het probleem van inconsistentie in de gegevens tolereren , d.w.z. op een bepaald moment zijn de gegevens in de cache anders dan de gegevens in de database.

U hoeft de waarde in de cache niet bij te werken wanneer de waarde is gewijzigd. Anders wordt het hele cachesysteem erg ingewikkeld (u moet bijvoorbeeld een lijst bijhouden met sleutels die in de cache zijn opgeslagen), en het is misschien ook niet nodig om dat te doen (de sleutelwaarde kan bijvoorbeeld maar één keer worden gebruikt en het is niet nodig om het nog meer bij te werken).

Hoe kunnen we de gegevens in de cache bijwerken en het cachesysteem eenvoudig houden?

Normaal gesproken stellen we, naast het instellen of bijwerken van een sleutel-waardepaar in de cache, ook een TIMEOUT in voor elke toets . Daarna kan de client het sleutel-waardepaar uit de cache halen. Als een sleutel echter de time-out bereikt, verwijdert het cachesysteem het sleutel-waardepaar uit de cache. Dit heet THE KEY HAS BEEN EXPIRED . De volgende keer dat de client die die sleutel uit de cache probeert te halen, krijgt hij niets. Dit heet CACHE MISS . In dit geval moet de klant het sleutel-waardepaar uit de database halen en het bijwerken naar de cache met een nieuwe time-out.

Als de gegevens in de database zijn bijgewerkt, terwijl de sleutel NIET in de cache is verlopen, krijgt de klant inconsistente gegevens. Wanneer de sleutel echter is verlopen, wordt de waarde ervan opgehaald uit de database en door een client in de cache geplaatst. Daarna krijgen andere klanten bijgewerkte gegevens totdat de gegevens opnieuw zijn gewijzigd.

Hoe stel ik de time-out in?

Normaal gesproken zijn er twee soorten verloopbeleid:

  1. Verlopen over N seconden/minuten/uren...
  2. Verlopen op een toekomstig tijdstip, bijv. verlopen op 2017/7/30 00:00:00

Een grote time-out kan de belasting van de database grotendeels verminderen, terwijl de gegevens voor een lange tijd verouderd kunnen zijn. Een kleine time-out kan de gegevens zoveel mogelijk up-to-date houden, terwijl de database zwaar belast wordt. Dus je moet de afweging maken bij het ontwerpen van de time-out .

Hoe verlopen Redis-sleutels?

Redis heeft twee manieren om sleutels te laten verlopen:

  1. Als de client een sleutel probeert te bedienen, controleert Redis of de sleutel de time-out heeft bereikt. Als dit het geval is, verwijdert Redis de sleutel en doet alsof de sleutel niet bestaat. Op deze manier zorgt Redis ervoor dat de klant geen verlopen gegevens krijgt.
  2. Redis heeft ook een verloopthread die toetsen bemonstert met een geconfigureerde frequentie. Als de sleutels de time-out bereiken, verwijdert Redis deze sleutels. Op deze manier kan Redis het verloop van de sleutel versnellen.


  1. Wat betekent het om een ​​werkset in RAM voor MongoDB te passen?

  2. Een groot aantal objecten in mongodb invoegen vanuit nodejs

  3. Node.js-bestandsupload (Express 4, MongoDB, GridFS, GridFS-Stream)

  4. Hoe lid te worden van meerdere collecties met $lookup in mongodb