Heim  >  Artikel  >  Backend-Entwicklung  >  Redis-Tutorial (5): Datentyp festlegen

Redis-Tutorial (5): Datentyp festlegen

黄舟
黄舟Original
2016-12-28 14:41:241233Durchsuche

1. Übersicht:

In Redis können wir den Set-Typ als unsortierte Zeichensammlung betrachten, wir können auch Datenwerte dieses Typs hinzufügen, löschen oder löschen. Bestimmen Sie, ob ein Element vorhanden ist, und andere Vorgänge. Es ist zu beachten, dass die zeitliche Komplexität dieser Operationen O(1) beträgt, d. h. die Operationen werden in konstanter Zeit abgeschlossen. Die maximale Anzahl von Elementen, die ein Set enthalten kann, beträgt 4294967295.
Im Gegensatz zum List-Typ sind doppelte Elemente in der Set-Sammlung nicht zulässig, die genau dem Set-Container in der C++-Standardbibliothek entspricht. Mit anderen Worten: Wenn Sie dasselbe Element mehrmals hinzufügen, bleibt nur eine Kopie des Elements im Set erhalten. Im Vergleich zum Listentyp verfügt der Set-Typ auch über ein sehr wichtiges Funktionsmerkmal: Die Aggregationsberechnungsoperationen zwischen mehreren Sets, z. B. Vereinigungen, Schnittmengen und Differenzen, werden auf der Serverseite abgeschlossen. Da diese Vorgänge auf der Serverseite ausgeführt werden, sind sie äußerst effizient und sparen viel Netzwerk-IO-Overhead.

2. Zugehörige Befehlsliste:

SINTERSTOREdestination key [key ...] Die Menge der Union-Ergebnismitglieder
Befehlsprototyp Zeitkomplexität Befehlsbeschreibung Rückgabewert
SADDkey-Mitglied [Mitglied ...] O(N) Das N in der Zeitkomplexität stellt die Anzahl der Mitglieder der Operation dar. Wenn während des Einfügevorgangs einige Mitglieder in den Parametern verwendet werden, die bereits im Set vorhanden sind, wird das Mitglied ignoriert und andere Mitglieder werden weiterhin normal eingefügt. Wenn der Schlüssel vor der Ausführung dieses Befehls nicht vorhanden ist, erstellt dieser Befehl einen neuen Satz und fügt dann die Mitglieder nacheinander in die Parameter ein. Wenn der Wert des Schlüssels nicht vom Typ „Set“ ist, gibt dieser Befehl relevante Fehlerinformationen zurück. Die Anzahl der tatsächlich in diesen Vorgang eingefügten Mitglieder.
SCARDkey O(1) Ermitteln Sie die Anzahl der Mitglieder im Set. Gibt die Anzahl der Mitglieder im Set zurück. Wenn der Schlüssel nicht vorhanden ist, wird 0 zurückgegeben.
SISMEMBER-Schlüsselmitglied O(1) Bestimmen Sie, ob das im Parameter angegebene Mitglied bereits in der Set-Sammlung vorhanden ist, die dem Schlüssel zugeordnet ist. 1 bedeutet, dass er bereits existiert, 0 bedeutet, dass er nicht existiert oder der Schlüssel selbst nicht existiert.
SMEMBERS-Schlüssel O(N) Das N in der Zeitkomplexität stellt die Anzahl der Mitglieder dar, die bereits im Set vorhanden sind. Rufen Sie alle Mitglieder des Sets ab, die dem Schlüssel zugeordnet sind. Gibt alle Mitglieder im Set zurück.
SPOPkey O(1) Entfernt zufällig ein Mitglied des Sets und gibt es zurück. Da das Layout der Elemente in einem Set nicht extern gesteuert wird, ist es unmöglich zu bestimmen, welches Element sich wie bei einer Liste am Anfang oder am Ende des Sets befindet. Gibt das entfernte Mitglied zurück oder Null, wenn der Schlüssel nicht existiert.
SREMkey-Mitglied [Mitglied ...] O(N) Das N in der Zeitkomplexität stellt die Anzahl der gelöschten Mitglieder dar. Löschen Sie das im Parameter angegebene Mitglied aus dem mit dem Schlüssel verknüpften Parameter. Wenn der Schlüssel nicht vorhanden ist, wird er als leerer Satz behandelt. Die Anzahl der tatsächlich aus dem Set entfernten Mitglieder oder 0, wenn keine Mitglieder vorhanden sind.
SRANDMEMBER-Schlüssel O(1) Dasselbe wie SPOP, gibt zufällig ein Mitglied des Sets zurück. Der Unterschied besteht darin, dass dieser Befehl dies nicht tut Zurückgegebene Mitglieder werden gelöscht. Gibt das Mitglied an einer zufälligen Position zurück oder Null, wenn der Schlüssel nicht existiert.
SMOVEsource-Ziel-Mitglied O(1) Verschieben Sie das Mitglied im Parameter atomar vom Quellschlüssel in den Satz, der dem Zielschlüssel zugeordnet ist Mitte. Daher erscheint das Mitglied zu einem bestimmten Zeitpunkt entweder in der Quelle oder im Ziel. Wenn das Mitglied in der Quelle nicht vorhanden ist, führt dieser Befehl keine weiteren Vorgänge aus und gibt 0 zurück, andernfalls wird das Mitglied von der Quelle zum Ziel verschoben. Wenn das Mitglied zu diesem Zeitpunkt bereits im Ziel vorhanden ist, entfernt dieser Befehl nur das Mitglied aus der Quelle.Wenn der mit dem Schlüssel verknüpfte Wert kein Set ist, werden relevante Fehlerinformationen zurückgegeben. 1 bedeutet normale Bewegung, 0 bedeutet, dass die Quelle keine Parametermitglieder enthält
SDIFFkey [key ...] O(N) Das N in der Zeitkomplexität stellt die Gesamtzahl der Mitglieder in allen Mengen dar. Gibt die Differenz zwischen den Mitgliedern im Set zurück, die dem ersten Schlüssel im Parameter zugeordnet sind, und den Sets, die allen nachfolgenden Schlüsseln zugeordnet sind. Wenn der Schlüssel nicht vorhanden ist, wird er als leerer Satz betrachtet. Eine Sammlung von Differenzergebnismitgliedern
SDIFFSTOREdestination key [key ...] O(N Dieser Befehl und SDIFF Die Befehle sind funktional identisch, der einzige Unterschied zwischen den beiden besteht darin, dass SDIFF das Ergebniselement der Differenz zurückgibt, während dieser Befehl das Differenzelement im mit dem Ziel verknüpften Set speichert. Wenn der Zielschlüssel bereits vorhanden ist, überschreibt dieser Vorgang seinen Mitglieder. Gibt die Anzahl der Differenzmitglieder zurück
SINTERkey [key ...] O(N*M) Zeit. N stellt die Anzahl der Elemente im minimalen Satz dar und M stellt die Anzahl der Sätze im Parameter dar. Dieser Befehl gibt den Schnittpunkt der Elemente in den Sätzen zurück, die allen Schlüsseln im Parameter zugeordnet sind Ist die mit einem Schlüssel im Parameter verknüpfte Menge leer oder existiert kein Schlüssel, dann ist das Ergebnis dieses Befehls eine leere Menge Die Menge der Schnittpunkt-Ergebniselemente
O(N*M) Dieser Befehl ist funktional identisch mit dem SINTER-Befehl. Der einzige Unterschied zwischen den beiden besteht darin, dass SINTER die Ergebnismitglieder von zurückgibt Die Kreuzung, während dieser Befehl die mit dem Ziel verknüpften Elemente zurückgibt. Wenn der Zielschlüssel bereits vorhanden ist, überschreibt diese Operation die Anzahl der Elemente. O(N) Das N in der Zeitkomplexität stellt die Gesamtzahl der Mitglieder in allen Mengen dar. Dieser Befehl gibt die Vereinigung der Mitglieder in den Mengen zurück, die allen Schlüsseln im Parameter zugeordnet sind . Set.
SUNIONSTOREdestination key [key ...] O(N) Dieser Befehl ist funktional identisch Der einzige Unterschied zwischen den beiden besteht darin, dass SUNION die Ergebnismitglieder der Union zurückgibt, während dieser Befehl die Unionsmitglieder im mit dem Zielschlüssel verknüpften Set speichert >Gibt die Anzahl der Gewerkschaftsmitglieder zurück.

3. Befehlsbeispiele:

1. SADD/SMEMBERS/SCARD/SISMEMBER:

#在Shell命令行下启动Redis的客户端程序。
    /> redis-cli
    #插入测试数据,由于该键myset之前并不存在,因此参数中的三个成员都被正常插入。
    redis 127.0.0.1:6379> sadd myset a b c
    (integer) 3
    #由于参数中的a在myset中已经存在,因此本次操作仅仅插入了d和e两个新成员。
    redis 127.0.0.1:6379> sadd myset a d e
    (integer) 2
    #判断a是否已经存在,返回值为1表示存在。
    redis 127.0.0.1:6379> sismember myset a
    (integer) 1
    #判断f是否已经存在,返回值为0表示不存在。
    redis 127.0.0.1:6379> sismember myset f
    (integer) 0
    #通过smembers命令查看插入的结果,从结果可以,输出的顺序和插入顺序无关。
    redis 127.0.0.1:6379> smembers myset
    1) "c"
    2) "d"
    3) "a"
    4) "b"
    5) "e"
    #获取Set集合中元素的数量。
    redis 127.0.0.1:6379> scard myset
    (integer) 5

2. SPOP/SREM/SRANDMEMBER/SMOVE:

#删除该键,便于后面的测试。
    redis 127.0.0.1:6379> del myset
    (integer) 1
    #为后面的示例准备测试数据。
    redis 127.0.0.1:6379> sadd myset a b c d
    (integer) 4
    #查看Set中成员的位置。
    redis 127.0.0.1:6379> smembers myset
    1) "c"
    2) "d"
    3) "a"
    4) "b"
    #从结果可以看出,该命令确实是随机的返回了某一成员。
    redis 127.0.0.1:6379> srandmember myset
    "c"
    #Set中尾部的成员b被移出并返回,事实上b并不是之前插入的第一个或最后一个成员。
    redis 127.0.0.1:6379> spop myset
    "b"
    #查看移出后Set的成员信息。
    redis 127.0.0.1:6379> smembers myset
    1) "c"
    2) "d"
    3) "a"
    #从Set中移出a、d和f三个成员,其中f并不存在,因此只有a和d两个成员被移出,返回为2。
    redis 127.0.0.1:6379> srem myset a d f
    (integer) 2
    #查看移出后的输出结果。
    redis 127.0.0.1:6379> smembers myset
    1) "c"
    #为后面的smove命令准备数据。
    redis 127.0.0.1:6379> sadd myset a b
    (integer) 2
    redis 127.0.0.1:6379> sadd myset2 c d
    (integer) 2
    #将a从myset移到myset2,从结果可以看出移动成功。
    redis 127.0.0.1:6379> smove myset myset2 a
    (integer) 1
    #再次将a从myset移到myset2,由于此时a已经不是myset的成员了,因此移动失败并返回0。
    redis 127.0.0.1:6379> smove myset myset2 a
    (integer) 0
    #分别查看myset和myset2的成员,确认移动是否真的成功。
    redis 127.0.0.1:6379> smembers myset
    1) "b"
    redis 127.0.0.1:6379> smembers myset2
    1) "c"
    2) "d"
    3) "a"

3. SDIFF/SDIFFSTORE/SINTER/SINTERSTORE:

 #为后面的命令准备测试数据。
    redis 127.0.0.1:6379> sadd myset a b c d
    (integer) 4
    redis 127.0.0.1:6379> sadd myset2 c
    (integer) 1
    redis 127.0.0.1:6379> sadd myset3 a c e
    (integer) 3
    #myset和myset2相比,a、b和d三个成员是两者之间的差异成员。再用这个结果继续和myset3进行差异比较,b和d是myset3不存在的成员。
    redis 127.0.0.1:6379> sdiff myset myset2 myset3
    1) "d"
    2) "b"
    #将3个集合的差异成员存在在diffkey关联的Set中,并返回插入的成员数量。
    redis 127.0.0.1:6379> sdiffstore diffkey myset myset2 myset3
    (integer) 2
    #查看一下sdiffstore的操作结果。
    redis 127.0.0.1:6379> smembers diffkey
    1) "d"
    2) "b"
    #从之前准备的数据就可以看出,这三个Set的成员交集只有c。
    redis 127.0.0.1:6379> sinter myset myset2 myset3
    1) "c"
    #将3个集合中的交集成员存储到与interkey关联的Set中,并返回交集成员的数量。
    redis 127.0.0.1:6379> sinterstore interkey myset myset2 myset3
    (integer) 1
    #查看一下sinterstore的操作结果。
    redis 127.0.0.1:6379> smembers interkey
    1) "c"
    #获取3个集合中的成员的并集。    
    redis 127.0.0.1:6379> sunion myset myset2 myset3
    1) "b"
    2) "c"
    3) "d"
    4) "e"
    5) "a"
    #将3个集合中成员的并集存储到unionkey关联的set中,并返回并集成员的数量。
    redis 127.0.0.1:6379> sunionstore unionkey myset myset2 myset3
    (integer) 5
    #查看一下suiionstore的操作结果。
    redis 127.0.0.1:6379> smembers unionkey
    1) "b"
    2) "c"
    3) "d"
    4) "e"
    5) "a"

4. Anwendungsbereich:


1). Der Datentyp „Set“ von Redis verfolgt einige eindeutige Daten, z. B. die eindeutigen IP-Adressinformationen, die einen bestimmten Blog besuchen. In diesem Szenario müssen wir bei jedem Besuch des Blogs nur die IP des Besuchers in Redis speichern, und der Datentyp „Set“ stellt automatisch die Eindeutigkeit der IP-Adresse sicher.
2) Nutzen Sie die praktischen und effizienten Funktionen serverseitiger Aggregationsvorgänge vom Typ „Set“, mit denen die Zuordnung zwischen Datenobjekten aufrechterhalten werden kann. Beispielsweise werden alle Kunden-IDs, die ein bestimmtes elektronisches Gerät kaufen, in einem bestimmten Set gespeichert, und Kunden-IDs, die ein anderes elektronisches Produkt kaufen, werden in einem anderen Set gespeichert. Wenn wir zu diesem Zeitpunkt ermitteln möchten, welche Kunden dieses gleichzeitig gekauft haben, Wenn es zwei Waren gibt, kann der Schnittpunktbefehl von Set seine Vorteile der Bequemlichkeit und Effizienz voll ausspielen.

Das Obige ist der Inhalt des Redis-Tutorials (5): Datentyp festlegen Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


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