suchen
HeimBackend-EntwicklungPHP-TutorialSperren und Entsperren von PHP Redis

Sperren und Entsperren von PHP Redis

Jul 06, 2018 pm 04:59 PM
phpredis

Dieser Artikel stellt hauptsächlich das Sperren und Entsperren von PHP Redis vor, das einen gewissen Referenzwert hat. Jetzt kann ich es mit allen teilen, die es brauchen.

PHP+Redis realisiert den Sperr- und Entsperrvorgang

Geschäftshintergrund: Bei Raumschach- und Kartenspielen werden Sperren benötigt, um ein unsauberes Lesen von Redis-Daten zu verhindern, das durch gleichzeitige Vorgänge verursacht wird, beispielsweise durch das Hinzufügen der Aktion eines Benutzers, der den Raum betritt:

Sperren und Entsperren von PHP Redis

Unter gleichzeitigen Bedingungen erhalten RoomUsers Dirty Reads.


Lösung: Sperren Sie den Raum, um jedes Mal einen Raum zu implementieren Es darf nur ein Client betrieben werden, und andere gleichzeitige Clients warten. Das heißt, es gibt mehrere Redis-Sperrmethoden: incr, set, setnx, hSetnx, Sie können sich auf diesen Artikel beziehen: Mehrere Implementierungen der Redis-Sperre


Hier verwende ich die Set-Methode

$roomId = $_GET['roomId'];
$user = $_GET['user'];             // '张三'
$key = "LockRoom:{$roomId}";
$value = $roomId.uniqid();
$ex = 3;
// 如果 $key 不存在的话,就设置 $key 的值为 $value,且有效期为 3s; 
// return TRUE / FALSE
while(true){
    $res  = $this->redis->set($key, $value, ['nx', 'ex' => $ex]);
    if($res) { break; }
    usleep(5000);
}

// 将用户添加进房间
$roomUsers = $this->redis->get("Room:{$roomId}:Users"); // ['李四', '王五']
$roomUsers[] = $user;
$this->redis->set("Room:{$roomId}:Users", $roomUsers); // ['李四', '王五', '张三']

Unlock

: Natürlich müssen Sie es nach dem Vorgang entsperren.

Zum Entsperren müssen Sie den Schlüssel löschen Löschen kann nicht direkt verwendet werden, da davon ausgegangen wird, dass Client01 die Sperre erhalten und den Benutzer zum Raum hinzugefügt hat. Zu diesem Zeitpunkt erhält Client02 auch die Sperre und setzt 3S Schließt den Vorgang ab und löscht den Schlüssel, wird die von client02 festgelegte Sperre gelöscht.
Es wird empfohlen, zum Löschen den Lua-Code zu verwenden.

// 将用户添加进房间
$roomUsers = $this->redis->get("Room:{$roomId}:Users"); // ['李四', '王五']
$roomUsers[] = $user;
$this->redis->set("Room:{$roomId}:Users", $roomUsers); // ['李四', '王五', '张三']

// lua 脚本解锁
// 先判断 key的值是否为 value, TRUE 才会删除, 所以 $value 的设计要有随机唯一性
$script = 'if redis.call("get",KEYS[1]) == ARGV[1]
then
    return redis.call("del",KEYS[1])
else
    return 0
end ';
$this->redis->eval($script, array($key , $value), 1);
Weitere Informationen finden Sie auch in diesem Artikel: Die richtige Haltung zum Entsperren der Redis-Sperre
Es gibt auch ein Dokument über die PHP-Bedienung von Redis: PhpRedis enthält Erklärungen zu set() und eval()-Funktionen

Hinweis: Bei Verwendung von Lua-Skript muss php.ini Systemfunktionen wie shell_exec() öffnen

Der obige Code dient nur als Referenz! !

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Anmerkungen zu Methoden und Parametern des PHP-Betriebs von Beanstalkd

Intranet-Penetrationsanwendung Spike implementiert durch PHP Refactoring abgeschlossen

Das obige ist der detaillierte Inhalt vonSperren und Entsperren von PHP Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
So machen Sie PHP -Anwendungen schnellerSo machen Sie PHP -Anwendungen schnellerMay 12, 2025 am 12:12 AM

TomakePhpapplicationsfaster, folgt der THESESTEPS: 1) UseOpCodeCaching LikeopcachetOstorePrecompiledScriptByteCode.2) MinimizedatabasequeriesByusedQueryCachingandefficiendexing.3) Hebel -FeaturesForbetTerCodeeffizienz.4) Implementierungspflichtiger Strategie

Checkliste für PHP -Leistungsoptimierung: Verbesserung der Geschwindigkeit jetztCheckliste für PHP -Leistungsoptimierung: Verbesserung der Geschwindigkeit jetztMay 12, 2025 am 12:07 AM

ToimProvePhpapplicationSpeed, folge theSeSteps: 1) enableOpCodeCachingWithAPCUToreducescriptexexexeTime.2) ImplementDatabaseQueryCachingusedpdotominimizedatabaseHits.3) UseHttp/2TomultiplexRequeTsReconneconneconneconneconneconneconnectionOverhead.4))

PHP -Abhängigkeitsinjektion: Verbesserung der Code -TestbarkeitPHP -Abhängigkeitsinjektion: Verbesserung der Code -TestbarkeitMay 12, 2025 am 12:03 AM

Die Abhängigkeitsinjektion (DI) verbessert die Testbarkeit von PHP -Code durch explizit transitive Abhängigkeiten signifikant. 1) DI -Entkopplungsklassen und spezifische Implementierungen machen Tests und Wartung flexibler. 2) Unter den drei Typen injiziert der Konstruktor explizite Expressionsabhängigkeiten, um den Zustand konsistent zu halten. 3) Verwenden Sie DI -Container, um komplexe Abhängigkeiten zu verwalten, um die Codequalität und die Entwicklungseffizienz zu verbessern.

PHP -Leistungsoptimierung: DatenbankabfrageoptimierungPHP -Leistungsoptimierung: DatenbankabfrageoptimierungMay 12, 2025 am 12:02 AM

DatabaseQueryoPtimizationInphpinvolvesseveralStrategieShancePerformance.1) selectonlynn -nötigesColumntededatatransfer.2) Verwenden Sie IndexingTospeedUpDatarErvieval.3) ImplementQueryCachingtoStoreresultsOffRequerien.4) Nützliche Stände

Einfacher Handbuch: E -Mail mit PHP -Skript sendenEinfacher Handbuch: E -Mail mit PHP -Skript sendenMay 12, 2025 am 12:02 AM

PhpisusedForSensionsemailsDuetoitsbuilt-inmail () functionandSupportelibrary-LikephpmailerandSwiftmailer.1) UsetheMail () Funktionsbasicemails, Butithaslimitations.2) Verwenden SiePr

PHP -Leistung: Identifizieren und Beheben von EngpässenPHP -Leistung: Identifizieren und Beheben von EngpässenMay 11, 2025 am 12:13 AM

PHP -Performance -Engpässe können in den folgenden Schritten gelöst werden: 1) Verwenden Sie XDEBUG oder Blackfire für die Leistungsanalyse, um das Problem herauszufinden. 2) Datenbankabfragen optimieren und Caches wie APCU verwenden; 3) Verwenden Sie effiziente Funktionen wie Array_filter, um Array -Operationen zu optimieren. 4) Opcache für Bytecode -Cache konfigurieren; 5) Optimieren Sie das Front-End, z. B. die Reduzierung von HTTP-Anfragen und das Optimieren von Bildern; 6) Überwachen und optimieren Sie die Leistung kontinuierlich. Durch diese Methoden kann die Leistung von PHP -Anwendungen erheblich verbessert werden.

Abhängigkeitsinjektion für PHP: Eine kurze ZusammenfassungAbhängigkeitsinjektion für PHP: Eine kurze ZusammenfassungMay 11, 2025 am 12:09 AM

Abhängigkeitsinjektion (DI) InphpisadesignPatternThatManageSandRecesClass -Dependenzen, EnhancingCodemodularity, Testbarkeit und Maschinenbarkeit.itallowsspassingdependencieStaDatabaseConnectionStoclassesasparameters, Erleichterung der Erleichterung von Erleichterung von Vermittlungen und Erleichterung von Erleichterung von und scalierbarkeit.

Erhöhen Sie die PHP -Leistung: Caching -Strategien und -technikenErhöhen Sie die PHP -Leistung: Caching -Strategien und -technikenMay 11, 2025 am 12:08 AM

CachingimProvePhpperformanceByStoringResultsofComputationsorquerienforquickretrieval, ReducingServerloadAnenHancingResponSetimes.EffectivestrategieSinclude: 1) OpcodeCaching, die storesCompiledPhpScriptsinmemorytoskipcompilation;

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool