Bei bestimmten zeitgesteuerten Operationen benötigen wir Rückmeldung zu den Ergebnissen. Zum Beispiel werden Bestellungen nach Ablauf automatisch gelöscht, Bestellungen automatisch nach einigen Tagen gelobt, unbezahlte Bestellungen nach 15 Minuten geschlossen usw., was mit einigen zeitgesteuerten Aufgaben-Frameworks oder Abfragemethoden abgeschlossen werden kann. Dieser Artikel verwendet den Redis Advanced Feature Cache Expiration Event Notification Mechanism in Kombination mit .NET/C#-Code, um geschäftliche Anforderungen zu erfüllen.
Einleitung
Anwendungsszenarien: 1. Im Zahlungsgeschäft werden unbezahlte Bestellungen automatisch geschlossen 2. Cache-Ablauf-Erinnerungen
Im Allgemeinen können wir den Timing-Service nutzen, um die automatische Schließung unbezahlter Bestellungen zu verarbeiten, etwa indem wir die Schnittstelle jede Minute aufrufen, um unbezahlte und abgelaufene Bestellungen zu bearbeiten, aber in diesem Fall verbraucht er die Computerleistung, selbst wenn keine Bestellung vorliegt, wird sie jede Minute bearbeitet, die maximale Verzögerung der Auftragsbearbeitungszeit beträgt 59 Sekunden, und der Timing-Service muss immer verfügbar sein
Was wollen wir also tun? Nur wenn es unbezahlte und abgelaufene Bestellungen mit niedriger Latenz gibt? Wir können den Cache-Ablaufmechanismus von Redis nutzen, um das Abonnement zu pushen.
Redis-Abonnement
Ändere die Notify-Keyspace-Events Ex in der Konfigurationsdatei redis.conf
Um Cup-Ressourcen zu sparen, sind Ereignisbenachrichtigungen standardmäßig nicht aktiviert, und standardmäßig ist notify-keyspace-events aktiviert
# K-Schlüsselraum-Benachrichtigung, <db>mit __keyspace@__ # E-Schlüssel-Ereignisbenachrichtigung, <db>vorangestellt mit __keysevent@__ # g del, exipre, umbenennen und andere Arten von generischen Befehlen, ... # $string Befehl # L Listenbefehl #s Kommando setzen # h Hash-Befehl # z geordnete Set-Befehle # x Ablaufereignis (erzeugt jedes Mal, wenn ein Schlüssel abläuft) # e Räumungsereignis (erzeugt, wenn der Schlüssel gelöscht wird, wenn der Speicher voll ist) # Ein g$lshzxe-Alias, also bedeutet "AKE" alle Ereignisse
Notify-Keyspace-Events "KX" zeigt an, dass Sie auf Ungültigkeitsereignisse für einen Schlüssel achten möchten. Das Setzen des Parameters auf die AKE-Zeichenkette bedeutet, alle Arten von Benachrichtigungen zu senden.
Ich habe Redis as Service auf meinem Rechner installiert, die redis.windows.conf-Konfigurationsdatei geändert und musste die Redis-Service-Konfiguration neu starten, damit sie wirksam werden konnte.
Beispiel für .NET/C#-Code
Das Paket ist wie folgt:
anrufen
Versuchen wir, einen Cache mit redis-cli zu schreiben.
Tatsächlich können Sie auch Benachrichtigungen über Cache-Ablauf abonnieren, indem Sie folgenden Befehl über redis-cli ausführen:
Wenn N Clients Benachrichtigungen über Cache-Ablaufereignisse abonnieren, benachrichtigt Redis N Nutzer über dieselbe Ablaufmeldung, nicht nur einen der Clients, wie in der Abbildung unten gezeigt:
C#-Quellcode-Download:
https://down.itsvse.com/item/17856.html
Zusammenfassung
Redis Pub/Sub ist ein unzuverlässiger Nachrichtenmechanismus, es speichert keine Informationen, es leitet nur online weiter, es gibt definitiv keinen Ack-Bestätigungsmechanismus, und nur das Abonnementsegment wird weitergeleitet, daher ist Keyspace Notifications ebenfalls ein unzuverlässiges Benachrichtigungssystem; wenn unser Unternehmen gute Zuverlässigkeit benötigt, ist das nicht die beste Wahl. Im Allgemeinen empfehlen wir RabbitMQs DLX (Dead-Letter-Exchange) zur Implementierung, also die verzögerte Warteschlangenfunktion. Es ist nur so, dass die Lösung von Redis leichter umzusetzen und kostengünstiger in der Betreibung ist. Es ist immer noch sehr praktisch für Unternehmen, die keine hohe Zuverlässigkeit benötigen. |