Bij het uitvoeren van bepaalde getimede bewerkingen hebben we feedback nodig over de resultaten. Bijvoorbeeld, bestellingen worden automatisch verwijderd na vervaldatum, bestellingen automatisch geprezen na enkele dagen, onbetaalde bestellingen worden na 15 minuten gesloten, enzovoort, wat kan worden afgerond met behulp van bepaalde getimede taakframeworks of pollingmethoden. Dit artikel gebruikt het Redis geavanceerde mechanisme voor het vervalen van vervaldatumgebeurtenissen, gecombineerd met .NET/C#-code om zakelijke vereisten te voltooien.
Introductie
Gebruiksscenario's: 1. In de betalingsbranche worden onbetaalde bestellingen automatisch gesloten 2. Herinneringen aan vervaldatum van de cache
In het algemeen kunnen we de timingservice gebruiken om de automatische afsluiting van onbetaalde orders te verwerken, zoals het elke minuut oproepen van de interface om onbetaalde en verlopen orders te verwerken, maar in dit geval verbruikt het de computerprestaties, zelfs als er geen order is, wordt deze elke minuut verwerkt, en de maximale vertraging van de orderverwerkingstijd is 59 seconden, en de timingservice moet altijd beschikbaar zijn
Wat willen we dus doen? Alleen als er onbetaalde en verlopen bestellingen zijn met lage latency, kunnen we het cache-vervalmechanisme van Edis gebruiken om het abonnement te pushen.
Redis-abonnement
Wijzig de notify-keyspace-events Ex in het configuratiebestand redis.conf
Om cupresources te besparen, zijn evenementmeldingen standaard niet ingeschakeld, en standaard is notify-keyspace-events
# K-sleutelruimte melding, <db>voorafgegaan door __keyspace@__ # E key event melding, <db>voorafgegaan door __keysevent@__ # g del, expipre, rename en andere soorten generieke commando's, ... # $string bevel # L Lijst bevel #s Stel het commando in # h Hash-commando # z geordend set command # x Vervaldatum (gegenereerd elke keer dat een sleutel vervalt) # e uitzettingsgebeurtenis (gegenereerd wanneer de sleutel is gewist wanneer het geheugen vol is) # Een g$lshzxe alias, dus "AKE" betekent alle gebeurtenissen
Notify-Keyspace-events "KX" geeft aan dat je wilt monitoren op ongeldigverklaringsgebeurtenissen voor een sleutel. Het instellen van de parameter op de string AKE betekent dat je alle soorten meldingen moet versturen.
Ik heb redis as service op mijn machine geïnstalleerd, het configuratiebestand redis.windows.conf aangepast en moest de configuratie van redis opnieuw starten om van kracht te worden.
.NET/C# codevoorbeeld
Het pakket is als volgt:
aanroepen
Laten we proberen een cache te schrijven met redis-cli.
Je kunt je zelfs abonneren op cache-vervalmeldingen door het volgende commando uit te voeren via redis-cli:
Wanneer N clients zich abonneren op meldingen van cache-vervalgebeurtenissen, zal Redis N gebruikers hetzelfde vervalmelding melden, niet slechts één van de clients, zoals weergegeven in de onderstaande figuur:
C# broncode downloaden:
https://down.itsvse.com/item/17856.html
samenvatting
Redis pub/sub is een onbetrouwbaar berichtmechanisme, het slaat geen informatie op, het wordt alleen online doorgestuurd, en er is zeker geen ack-bevestigingsmechanisme, en alleen het abonnementsgedeelte wordt doorgestuurd, dus Keyspace Notifications is ook een onbetrouwbaar notificatiesysteem; als ons bedrijf goede betrouwbaarheid nodig heeft, is dit niet de beste keuze. Over het algemeen raden we RabbitMQ's DLX (Dead-Letter-Exchange) aan om dit te implementeren, wat de vertraagde wachtrijfunctie is. Het is alleen zo dat de oplossing van Edis makkelijker te implementeren is en goedkoper in gebruik. Het is nog steeds erg handig voor bedrijven die geen hoge betrouwbaarheid nodig hebben. |