Inhaltsverzeichnis
incr
blpop
hsetnx
hdel
lpush
rpoplpush
Heim Datenbank Redis Incr- und Hash-Anwendungen von Redis analysieren

Incr- und Hash-Anwendungen von Redis analysieren

Sep 18, 2021 pm 04:46 PM
redis

incr

Zum Beispiel verwenden Pekinger Nummernschilder einen Prozess, bei dem zunächst die Qualifikationen erfasst und dann genehmigt werden. Es gibt N Nummern im Nummernschildpool und die Seite wird in zehn Elementen pro Seite angezeigt. Nach jeder Nummer befindet sich eine Schaltfläche zum Ergreifen, und eine Person kann nur ein Nummernschild ergreifen, und dasselbe Nummernschild kann nur von jemandem erfasst werden eine Person. Referenz zum Geschäftsmodell (http://num.10010.com/NumApp/chseNumList/init?num=186)

 if ($this->redis_db->incr("bj_".$car_no) != 1) {
      让别人先下手了,点别的去~
  }else{
       //抢到竞态条件,如果不复核资质要求退出,并清除incr
       if(抢到了但是没资质等){
         释放对此id的竟态权,别占茅坑
         $this->yredis_db->del("bj_".$id);
       }else{
         其他业务A
         抱得号码归...
         其他业务B
     }
}
Nach dem Login kopieren

Außerdem incr Ist richtig, dass string-Typen, hash-Typen und sortedSet-Typen alle bedient werden könnenincrstring类型,hash类型,sortedSet类型都可以进行操作

blpop

blpop相对于lpop有一个好处,可以对多个队列进行优先级操作。
blpop会按照key的排列顺序依次弹出,返回值为key的listname及具体元素值,而且可以设置block时间,原则是先阻塞先服务.

        $date = date('Ymd', time());
        //左进左出 ,优先分配一般的车牌号码,然后在分配非常好的连号号码,设置一个阻塞时间
        return $this->redis->blpop(self::$_config['dispatch_normal_list'] . $date, self::$_config['dispatch_better_list'] . $date, self::$_config['redis_block_l_pop_time_out']);
Nach dem Login kopieren

hsetnx

设置hash中一个field为指定value,前提是field不存在。如果存在,返回0。
这样能保证在一个人只能抢一个车牌,但是抢到车牌执行付款或者其他业务操作过程中,其他人无法对此操作,(即不能将此车牌绑定到其他人身上)。根据具体业务情况,可设置基于car_no的hash field和基于 people 的hash field。

hash_base_people {"zhangsan":"京A888","lisi":"京A999"}
hash_base_car_no {"京A888":"zhangsan","京A999":"lisi"}
Nach dem Login kopieren

基于这两个hash 可以做更多关于业务的操作,比如通过hget等查看具体的绑定关系。

hdel

有了通过hsetnx的绑定模型,当某个人对某个车牌交付了订金等一系列之后,就代表可以永远的将其消除,这样会用到hdel。另外如果在指定时间内没有做比如交付订金之类的操作,这个车牌号码会回炉到原始列表中。

 //删除以people_id为key的hash
 $base_people_id_del = $this->redis->hdel(self::$_config['hash_base_people'], $people_id);

 //删除以car_no为key的hash
 $base_car_no_del = $this->redis->hdel(self::$_config['hash_base_car_no'], $clue_id);
Nach dem Login kopieren

lpush

如果有入口将北京可以抢拍的车牌放入到一个list里

$lpush_res = $redisObj->lpush($list_name, $car_no);
Nach dem Login kopieren

其中list_name的值可以根据car_no的具体值来确定,比如有6和8的我就放入到better_car_no列表里,其他的放入到normal_car_no列表里,最后可以用blpop来指定一个先后优先级。

rpoplpush

安全的队列弹出模式,比如N多人对一个入口按钮进行操作,如果list结构中有足够的数据,每个人有且只有一条数据会被领取,领取之后再做其他的业务操作。
但是问题是,如果用lpop之后,原队列中已被弹出,如果中途客户端在取得该pop的元素后,且完成处理此元素前,客户端发生崩溃。这时候此条消息就凭空消失了。如果没有其他补助措施(比如通过绑定或者记录此弹出的元素)需要严谨要求,可以用rpoplpush可以解决此问题。在客户端真正处理完此pop的元素之后,通过lrem

blpop

blpop ist Der Unterschied zu lpop besteht darin, dass mehrere Warteschlangen priorisiert werden können. blpop wird der Reihe nach entsprechend der Reihenfolge von key angezeigt. Der Rückgabewert ist der Listenname und der spezifische Elementwert von key und block kann Zeit eingestellt werden. Das Prinzip besteht darin, zuerst zu blockieren und zuerst zu dienen Wert, Prämisse Ja Feld existiert nicht. Falls vorhanden, wird 0 zurückgegeben. Dadurch wird sichergestellt, dass eine Person nur ein Nummernschild ergreifen kann, andere Personen dies jedoch nicht tun können, während sie das Nummernschild zur Durchführung von Zahlungen oder anderen Geschäftsvorgängen ergreifen (d. h. dieses Nummernschild kann nicht an andere Personen gebunden werden). Abhängig von der spezifischen Geschäftssituation können ein Hash-Feld basierend auf car_no und ein Hash-Feld basierend auf Personen festgelegt werden.
rrreee

Basierend auf diesen beiden Hashes können Sie weitere geschäftsbezogene Vorgänge ausführen, z. B. die Überprüfung der spezifischen Bindungsbeziehung über hget usw. 🎜🎜hdel🎜🎜Wenn beim Bindungsmodell über hsetnx jemand eine Kaution für ein bestimmtes Nummernschild usw. zahlt, bedeutet dies, dass es für immer eliminiert werden kann, sodass hdel verwendet wird. Wenn außerdem innerhalb der angegebenen Zeit keine Vorgänge wie die Zahlung einer Kaution durchgeführt werden, wird das Kennzeichen auf die ursprüngliche Liste zurückgesetzt. 🎜rrreee🎜lpush🎜🎜Wenn es eine Einfahrt gibt, fügen Sie die Nummernschilder, die in Peking eingerastet werden können, in eine Liste ein🎜rrreee🎜Der Wert von list_name kann anhand des spezifischen Werts von car_no bestimmt werden. Wenn es beispielsweise 6 gibt und 8, ich werde sie in die Liste better_car_no einfügen, andere werden in die Liste normal_car_no eingefügt, und schließlich können Sie mit blpop eine Priorität angeben . 🎜🎜rpoplpush🎜🎜Sicherer Warteschlangen-Popup-Modus, wenn beispielsweise N Personen eine Eingangstaste betätigen, wenn genügend Daten in der Listenstruktur vorhanden sind, wird jede Person nur ein Datenelement erfassen und andere Geschäfte Die Operationen werden nach Erhalt durchgeführt. 🎜Aber das Problem besteht darin, dass nach der Verwendung von lpop die ursprüngliche Warteschlange geöffnet wurde, wenn der Client das pop-Element in der Mitte erhält und bevor die Verarbeitung dieses Elements abgeschlossen ist abgestürzt. Zu diesem Zeitpunkt verschwand die Nachricht wie aus dem Nichts. Wenn keine anderen ergänzenden Maßnahmen (z. B. Bindung oder Aufzeichnung des Popup-Elements) strenge Anforderungen erfordern, können Sie rpoplpush verwenden, um dieses Problem zu lösen. Nachdem der Client das pop-Element tatsächlich verarbeitet hat, wird die Nachricht sicher über lrem gelöscht. 🎜🎜🎜Empfohlenes Lernen: „🎜Redis-Video-Tutorial🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonIncr- und Hash-Anwendungen von Redis analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So implementieren Sie die zugrunde liegenden Redis So implementieren Sie die zugrunde liegenden Redis Apr 10, 2025 pm 07:21 PM

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

So sehen Sie die Versionsnummer der Redis So sehen Sie die Versionsnummer der Redis Apr 10, 2025 pm 05:57 PM

Um die Redis -Versionsnummer anzuzeigen, können Sie die folgenden drei Methoden verwenden: (1) Geben Sie den Info -Befehl ein, (2) Starten Sie den Server mit der Option --version und (3) die Konfigurationsdatei anzeigen.

Wie wird der Redis -Cluster implementiert? Wie wird der Redis -Cluster implementiert? Apr 10, 2025 pm 05:27 PM

Redis Cluster ist ein verteiltes Bereitstellungsmodell, das die horizontale Expansion von Redis-Instanzen ermöglicht und durch Kommunikation zwischen Noten, Hash-Slot-Abteilung Schlüsselraum, Knotenwahlen, Master-Slave-Replikation und Befehlsumleitung implementiert wird: Inter-Node-Kommunikation: Virtuelle Netzwerkkommunikation wird durch Cluster-Bus realisiert. Hash -Slot: Teilen Sie den Schlüsselraum in Hash -Slots, um den für den Schlüssel verantwortlichen Knoten zu bestimmen. Knotenwahlen: Es sind mindestens drei Master -Knoten erforderlich, und nur ein aktiver Masterknoten wird durch den Wahlmechanismus sichergestellt. Master-Slave-Replikation: Der Masterknoten ist für das Schreiben von Anforderungen verantwortlich und der Slaveknoten ist für das Lesen von Anforderungen und Datenreplikation verantwortlich. Befehlsumleitung: Der Client stellt eine Verbindung zum für den Schlüssel verantwortlichen Knoten her, und der Knoten leitet falsche Anforderungen weiter. Fehlerbehebung: Fehlererkennung, Off-Linie markieren und neu

Was tun, wenn Redis-Server nicht gefunden werden kann Was tun, wenn Redis-Server nicht gefunden werden kann Apr 10, 2025 pm 06:54 PM

Schritte zur Lösung des Problems, das Redis-Server nicht finden kann: Überprüfen Sie die Installation, um sicherzustellen, dass Redis korrekt installiert ist. Setzen Sie die Umgebungsvariablen Redis_host und Redis_port; Starten Sie den Redis-Server Redis-Server; Überprüfen Sie, ob der Server Redis-Cli Ping ausführt.

So verwenden Sie Redis Zset So verwenden Sie Redis Zset Apr 10, 2025 pm 07:27 PM

Redis bestellte Sets (ZSETs) werden verwendet, um bestellte Elemente und Sortieren nach zugehörigen Bewertungen zu speichern. Die Schritte zur Verwendung von ZSET umfassen: 1. Erstellen Sie ein Zset; 2. Fügen Sie ein Mitglied hinzu; 3.. Holen Sie sich eine Mitgliederbewertung; 4. Holen Sie sich eine Rangliste; 5. Holen Sie sich ein Mitglied in der Rangliste; 6. Ein Mitglied löschen; 7. Holen Sie sich die Anzahl der Elemente; 8. Holen Sie sich die Anzahl der Mitglieder im Score -Bereich.

Wie ist der Schlüssel für die Redis -Abfrage eindeutig Wie ist der Schlüssel für die Redis -Abfrage eindeutig Apr 10, 2025 pm 07:03 PM

Redis verwendet fünf Strategien, um die Einzigartigkeit von Schlüssel zu gewährleisten: 1. Namespace -Trennung; 2. Hash -Datenstruktur; 3.. Datenstruktur festlegen; 4. Sonderzeichen von Stringschlüssel; 5. Lua -Skriptüberprüfung. Die Auswahl spezifischer Strategien hängt von Datenorganisationen, Leistung und Skalierbarkeit ab.

So sehen Sie alle Schlüssel in Redis So sehen Sie alle Schlüssel in Redis Apr 10, 2025 pm 07:15 PM

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

See all articles