Heim  >  Artikel  >  Backend-Entwicklung  >  Redis-Tutorial (2): String-Datentyp

Redis-Tutorial (2): String-Datentyp

黄舟
黄舟Original
2016-12-28 14:18:361170Durchsuche

1. Übersicht:

Der String-Typ ist der einfachste Datenspeichertyp in Redis. Er ist binärsicher, was bedeutet, dass dieser Typ Daten in jedem Format akzeptieren kann, z Daten oder Json-Objektbeschreibungsinformationen usw. In Redis beträgt die maximale Datenlänge, die der String-Typ Value aufnehmen kann, 512 MB.

2. Zugehörige Befehlsliste:

Befehlsprototyp Zeitkomplexität Befehlsbeschreibung Rückgabewert
APPENDkeyvalue O(1) Wenn der Schlüssel bereits vorhanden ist, hängt der APPEND-Befehl die Daten des Parameterwerts an das Ende des vorhandenen Werts. Wenn der Schlüssel nicht vorhanden ist, erstellt der Befehl APPEND einen neuen Schlüssel/Wert Die Länge des angehängten Werts
DECRkey O( 1) dekrementiert den Wert des angegebenen Schlüssels atomar um 1. Wenn der Schlüssel nicht existiert, ist sein Anfangswert 0 und sein Wert nach decr ist -1. Wenn der Wert von Value nicht in einen ganzzahligen Wert konvertiert werden kann, z. B. Hello, schlägt der Vorgang fehl und die entsprechende Fehlermeldung wird zurückgegeben. Hinweis: Der Wertebereich dieser Operation ist eine 64-Bit-Ganzzahl mit Vorzeichen. Wert nach Dekrementierung.
INCRkey O(1) erhöht den Wert des angegebenen Schlüssels atomar um 1. Wenn der Schlüssel nicht existiert, ist sein Anfangswert 0 und sein Wert nach incr ist 1. Wenn der Wert von Value nicht in einen ganzzahligen Wert konvertiert werden kann, z. B. Hello, schlägt der Vorgang fehl und die entsprechende Fehlermeldung wird zurückgegeben. Hinweis: Der Wertebereich dieser Operation ist der inkrementierte Wert der 64-Bit-Ganzzahl mit Vorzeichen .
DECRBYkey dekrementieren O(1) Der Wert des angegebenen Schlüssels wird durch Dekrementieren atomar reduziert. Wenn der Schlüssel nicht vorhanden ist, ist sein Anfangswert 0 und sein Wert ist -dekrementieren nach decrby. Wenn der Wert von Value nicht in einen ganzzahligen Wert konvertiert werden kann, z. B. Hello, schlägt der Vorgang fehl und die entsprechende Fehlermeldung wird zurückgegeben. Hinweis: Der Wertebereich dieser Operation ist eine 64-Bit-Ganzzahl mit Vorzeichen. Reduzierter Wert
INCRBYkey-Inkrement O(1) Erhöhen Sie die Atomizität des Werts des angegebenen Schlüsselinkrements. Wenn der Schlüssel nicht vorhanden ist, ist sein Anfangswert 0 und sein Wert nach incrby ist inkrementiert. Wenn der Wert von Value nicht in einen ganzzahligen Wert konvertiert werden kann, z. B. Hello, schlägt der Vorgang fehl und die entsprechende Fehlermeldung wird zurückgegeben. Hinweis: Der Wertebereich dieser Operation ist eine 64-Bit-Ganzzahl mit Vorzeichen. Erhöhter Wert
GETkey O(1) Den Wert des angegebenen Schlüssels abrufen. Wenn der mit dem Schlüssel verknüpfte Wert nicht vom Typ „String“ ist, gibt Redis eine Fehlermeldung zurück, da der GET-Befehl nur zum Abrufen eines String-Werts verwendet werden kann. Wert, der sich auf den Schlüssel bezieht, gibt Null zurück
SETkey-Wert O(1) Legen Sie den Schlüssel so fest, dass er den angegebenen Zeichenfolgenwert enthält. Wenn der Schlüssel bereits vorhanden ist, überschreiben Sie seinen ursprünglichen Wert. Gibt immer „OK“ zurück.
GETSETkey-Wert O(1) Setzen Sie den Schlüssel atomar auf den angegebenen Wert und geben Sie den ursprünglichen Wert des Schlüssels zurück. Wie der GET-Befehl kann dieser Befehl nur Zeichenfolgenwerte verarbeiten, andernfalls gibt Redis relevante Fehlerinformationen aus. Gibt den ursprünglichen Wert des Schlüssels zurück. Wenn der Schlüssel vorher nicht existiert, wird Null zurückgegeben.
STRLENkey O(1) Gibt die Zeichenwertlänge des angegebenen Schlüssels zurück. Wenn Value nicht vom Typ „String“ ist, schlägt Redis fehl ausführen und entsprechende Fehlermeldungen ausgeben. Gibt die Wertzeichenlänge des angegebenen Schlüssels zurück. Wenn der Schlüssel nicht existiert, wird 0 zurückgegeben
SETEXkey-Sekundenwert O(1) Führen Sie zwei Vorgänge atomar aus. Eine besteht darin, den Wert des Schlüssels auf die angegebene Zeichenfolge festzulegen und gleichzeitig die Überlebenszeit (Sekunden) des Schlüssels auf dem Redis-Server festzulegen. Dieser Befehl wird hauptsächlich verwendet, wenn Redis als Cache-Server verwendet wird.
SETNXkey-Wert O(1) Wenn der angegebene Schlüssel nicht vorhanden ist, legen Sie den Schlüssel so fest, dass er den angegebenen Zeichenfolgenwert enthält Der Effekt entspricht dem SET-Befehl. Im Gegenteil, wenn der Schlüssel bereits vorhanden ist, führt der Befehl keine Aktion aus und kehrt zurück. 1 bedeutet, dass die Einstellung erfolgreich ist, andernfalls 0
SETRANGEkey offset value O(1) Ersetzen Sie einige Zeichen von der angegebene Schlüsselzeichenfolgenwert. Ausgehend vom Offset ist die Ersetzungslänge die Zeichenfolgenlänge des dritten Parameterwerts des Befehls. Wenn der Wert des Offsets größer als die Zeichenfolgenlänge des ursprünglichen Werts des Schlüssels ist, füllt Redis das Ende des Werts aus (Offset -). strlen(value)) Nummer 0x00 und hängen Sie dann den neuen Wert an. Wenn der Schlüssel nicht vorhanden ist, geht dieser Befehl davon aus, dass die Länge seines ursprünglichen Werts 0 ist, und hängt den Offset 0x00s an, bevor er den neuen Wert anhängt. Da die maximale Länge des String-Werts 512 MB beträgt, beträgt der maximale Offset-Wert 536870911. Abschließend ist zu beachten, dass Redis, wenn der Befehl dazu führt, dass die ursprüngliche Wertlänge des angegebenen Schlüssels während der Ausführung zunimmt, genügend Speicher neu zuweist, um alle ersetzten Zeichenfolgen aufzunehmen, was zu einem gewissen Leistungsverlust führt. Die geänderte Zeichenfolgenwertlänge.
GETRANGEkey start end O(1) Wenn die Länge der abgefangenen Zeichenfolge sehr kurz ist, können wir uns die zeitliche Komplexität vorstellen Der Befehl lautet O(1), ansonsten ist er O(N), wobei N die Länge des abgefangenen Teilstrings darstellt. Wenn dieser Befehl eine Teilzeichenfolge abfängt, umfasst er sowohl den Anfang (0 steht für das erste Zeichen) als auch das Zeichen am Ende in einem geschlossenen Intervall. Wenn der Endwert die Zeichenlänge von „Wert“ überschreitet, fängt dieser Befehl nur die Zeichen ab, die am Anfang beginnen . Alle Charakterdaten. Substring
SETBITkey offset value O(1) Setzen Sie den Wert von BIT auf den angegebenen Offset, der The Der Wert kann nur 1 oder 0 sein. Nach der Einstellung gibt dieser Befehl den ursprünglichen BIT-Wert des Offsets zurück. Wenn der angegebene Schlüssel nicht vorhanden ist, erstellt dieser Befehl einen neuen Wert und setzt den BIT-Wert im Parameter auf den angegebenen Offset. Wenn der Offset größer als die Zeichenlänge von Value ist, streckt Redis den Value-Wert und setzt den BIT-Wert im Parameter auf den angegebenen Offset, und der in der Mitte hinzugefügte BIT-Wert ist 0. Als letztes ist zu beachten, dass der Offset-Wert größer als 0 sein muss. Der ursprüngliche Wert des BIT am angegebenen Offset.
GETBITkey offset O(1) Gibt den Wert von BIT am angegebenen Offset, 0 oder 1, zurück. Dieser Befehl gibt 0 zurück, wenn Offset die Länge des String-Werts überschreitet, sodass er für einen leeren String immer 0 zurückgibt. BIT-Wert am angegebenen Offset
MGETkey [key ...] O(N) N bedeutet Get die Anzahl der Schlüssel. Gibt die Werte aller angegebenen Schlüssel zurück. Wenn einer der Schlüssel nicht existiert oder sein Wert nicht vom Typ String ist, gibt der Wert des Schlüssels Null zurück. Gibt eine Liste von Werten für einen Satz angegebener Schlüssel zurück.
MSETkey value [Schlüsselwert ...] O(N) N stellt die Anzahl der angegebenen Schlüssel dar. Dieser Befehl schließt alle Schlüssel-/Wert-Einstellungsvorgänge in den Parametern atomar ab. Sein spezifisches Verhalten kann als wiederholtes Ausführen des SET-Befehls angesehen werden. Dieser Befehl schlägt nicht fehl und gibt immer „OK“ zurück.
MSETNXSchlüsselwert [Schlüsselwert ...] O(N) N stellt die Anzahl der angegebenen Schlüssel dar. Dieser Befehl schließt alle Schlüssel-/Wert-Einstellungsvorgänge in den Parametern atomar ab. Sein spezifisches Verhalten kann als mehrmalige iterative Ausführung des SETNX-Befehls angesehen werden. Hier muss jedoch klargestellt werden, dass der gesamte Vorgang rückgängig gemacht wird, wenn ein Schlüssel in diesem Schlüsselstapel bereits vorhanden ist, d. h. alle Änderungen werden nicht wirksam. 1 bedeutet, dass alle Schlüssel erfolgreich gesetzt wurden, 0 bedeutet, dass kein Schlüssel geändert wurde.

3. Befehlsbeispiele:

1. SET/GET/APPEND/STRLEN:

  /> redis-cli   #执行Redis客户端工具。
    redis 127.0.0.1:6379> exists mykey                   #判断该键是否存在,存在返回1,否则返回0。
    (integer) 0
    redis 127.0.0.1:6379> append mykey "hello"      #该键并不存在,因此append命令返回当前Value的长度。
    (integer) 5
    redis 127.0.0.1:6379> append mykey " world"    #该键已经存在,因此返回追加后Value的长度。
    (integer) 11
    redis 127.0.0.1:6379> get mykey                      #通过get命令获取该键,以判断append的结果。
    "hello world"
    redis 127.0.0.1:6379> set mykey "this is a test" #通过set命令为键设置新值,并覆盖原有值。
    OK
    redis 127.0.0.1:6379> get mykey
    "this is a test"
    redis 127.0.0.1:6379> strlen mykey                  #获取指定Key的字符长度,等效于C库中strlen函数。
    (integer) 14


2. INCR/DECR/INCRBY/ DECRBY:
 redis 127.0.0.1:6379> set mykey 20     #设置Key的值为20
    OK
    redis 127.0.0.1:6379> incr mykey         #该Key的值递增1
    (integer) 21
    redis 127.0.0.1:6379> decr mykey        #该Key的值递减1
    (integer) 20
    redis 127.0.0.1:6379> del mykey          #删除已有键。
    (integer) 1
    redis 127.0.0.1:6379> decr mykey        #对空值执行递减操作,其原值被设定为0,递减后的值为-1
    (integer) -1
    redis 127.0.0.1:6379> del mykey   
    (integer) 1
    redis 127.0.0.1:6379> incr mykey        #对空值执行递增操作,其原值被设定为0,递增后的值为1
    (integer) 1
    redis 127.0.0.1:6379> set mykey hello #将该键的Value设置为不能转换为整型的普通字符串。
    OK
    redis 127.0.0.1:6379> incr mykey        #在该键上再次执行递增操作时,Redis将报告错误信息。
    (error) ERR value is not an integer or out of range
    redis 127.0.0.1:6379> set mykey 10
    OK
    redis 127.0.0.1:6379> decrby mykey 5 
    (integer) 5
    redis 127.0.0.1:6379> incrby mykey 10
    (integer) 15

3. GETSET:

  redis 127.0.0.1:6379> incr mycounter      #将计数器的值原子性的递增1
    (integer) 1
    #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成。
    redis 127.0.0.1:6379> getset mycounter 0  
    "1"
    redis 127.0.0.1:6379> get mycounter       #查看设置后的结果。
    "0"

4. SETEX:

  redis 127.0.0.1:6379> setex mykey 10 "hello"   #设置指定Key的过期时间为10秒。
    OK    
    #通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。
    redis 127.0.0.1:6379> ttl mykey                       
    (integer) 4
    redis 127.0.0.1:6379> get mykey                      #在该键的存活期内我们仍然可以获取到它的Value。
    "hello"
    redis 127.0.0.1:6379> ttl mykey                        #该ttl命令的返回值显示,该Key已经过期。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #获取已过期的Key将返回nil。
    (nil)

5. SETNX:

    redis 127.0.0.1:6379> del mykey                      #删除该键,以便于下面的测试验证。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "hello"        #该键并不存在,因此该命令执行成功。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "world"       #该键已经存在,因此本次设置没有产生任何效果。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #从结果可以看出,返回的值仍为第一次设置的值。
    "hello"

6. SETRANGE/GETRANGE:

redis 127.0.0.1:6379> set mykey "hello world"       #设定初始值。
    OK
    redis 127.0.0.1:6379> setrange mykey 6 dd          #从第六个字节开始替换2个字节(dd只有2个字节)
    (integer) 11
    redis 127.0.0.1:6379> get mykey                         #查看替换后的值。
    "hello ddrld"
    redis 127.0.0.1:6379> setrange mykey 20 dd        #offset已经超过该Key原有值的长度了,该命令将会在末尾补0。
    (integer) 22
    redis 127.0.0.1:6379> get mykey                           #查看补0后替换的结果。
    "hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
    redis 127.0.0.1:6379> del mykey                         #删除该Key。
    (integer) 1
    redis 127.0.0.1:6379> setrange mykey 2 dd         #替换空值。
    (integer) 4
    redis 127.0.0.1:6379> get mykey                        #查看替换空值后的结果。
    "\x00\x00dd"   
    redis 127.0.0.1:6379> set mykey "0123456789"   #设置新值。
    OK
    redis 127.0.0.1:6379> getrange mykey 1 2      #截取该键的Value,从第一个字节开始,到第二个字节结束。
    "12"
    redis 127.0.0.1:6379> getrange mykey 1 20   #20已经超过Value的总长度,因此将截取第一个字节后面的所有字节。
    "123456789"

7. SETBIT/GETBIT:

  redis 127.0.0.1:6379> del mykey
    (integer) 1
    redis 127.0.0.1:6379> setbit mykey 7 1       #设置从0开始计算的第七位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0001的十六进制值为0x01
    "\x01"
    redis 127.0.0.1:6379> setbit mykey 6 1       #设置从0开始计算的第六位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0011的十六进制值为0x03
    "\x03"
    redis 127.0.0.1:6379> getbit mykey 6          #返回了指定Offset的BIT值。
    (integer) 1
    redis 127.0.0.1:6379> getbit mykey 10        #Offset已经超出了value的长度,因此返回0。
    (integer) 0

8. MSET/MGET/MSETNX:

    redis 127.0.0.1:6379> mset key1 "hello" key2 "world"   #批量设置了key1和key2两个键。
    OK
    redis 127.0.0.1:6379> mget key1 key2                        #批量获取了key1和key2两个键的值。
    1) "hello"
    2) "world"
    #批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1。
    redis 127.0.0.1:6379> msetnx key3 "stephen" key4 "liu" 
    (integer) 1
    redis 127.0.0.1:6379> mget key3 key4                   
    1) "stephen"
    2) "liu"
    #批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0。
    redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" 
    (integer) 0
    #批量获取key3和key5,由于key5没有设置成功,所以返回nil。
    redis 127.0.0.1:6379> mget key3 key5                   
    1) "stephen"
    2) (nil)

Das Obige ist Redis-Tutorial (2): Inhalt des String-Datentyps 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