In Geschäftsszenarien sind gleichzeitige Operationen von Inhalten, wie Commodity Inventory, derselben Datei usw., nicht erlaubt, und die Programmanwendung wird auf mehreren Servern bereitgestellt.
Das zuvor geschriebene zk-basierte verteilte Schloss ist wie folgt:
Was Sie auch wissen müssen, um diesen Artikel zu lesen:
.NET Core implementiert verteilte Sperren basierend auf RedisDas Prinzip besteht darin, den SETNX-Befehl redis aufzurufen, wenn der Schlüssel bereits existiert, bewirkt der Befehl SETNX nichts. Der Befehl gibt 1 zurück, wenn die Einstellung erfolgreich ist, und 0, wenn die Einstellung fehlschlägt.
Der Hyperlink-Login ist sichtbar.
Erstellen Sie ein neues .NET Core 3.1-Konsolenprojekt, fügen Sie eine StackExchange.Redis-Referenz hinzu und verwenden Sie den nuget-Befehl wie folgt:
Wir rufen die StringSet-Methode der Bibliothek auf, über den Quellcode von StackExchange.Redis sehen wir, dass die StringSet-Methode die private Methode GetStringSetMessage aufruft, um verschiedene Set-Befehle über den Aufzählungswert von wann auszuführen; der Code ist wie folgt:
Wir führen den SETNX-Befehl 2000 Mal durch einen parallelen Testaufruf des Programms aus, der in zwei Abschnitten ausgeführt wird, wobei die Cache-Gültigkeit des Schlüssels 5 Sekunden beträgt, das heißt, der Schlüssel wird automatisch nach 5 Sekunden freigegeben, das heißt, das Schloss wird freigegeben.
Der Code lautet wie folgt:
Wie Sie sehen, sind insgesamt 2 erfolgreiche Einfügungen und 1998 gescheiterte Versuche genau das, was wir erwartet haben, und die Darstellungen sind wie folgt:
Zu diesem Zeitpunkt wurde das Schloss noch nicht freigegeben. (Ende)
|