首頁 > 軟體

一文搞懂Redis中String資料型別

2022-04-02 19:02:15

概述:

字串型別是Redis中最為基礎的資料儲存型別,它在Redis中是二進位制安全的,這便意味著該型別可以接受任何格式的資料,如JPEG影象資料或Json物件描述資訊等。在Redis中字串型別的Value最多可以容納的資料長度是512M。

相關命令列表:

命令原型時間複雜度命令描述返回值
APPENDO(1) 如果該Key已經存在,APPEND命令將引數Value的資料追加到已存在Value的末尾。如果該Key不存在,APPEND命令將會建立一個新的Key/Value。追加後Value的長度。
DECRO(1)  

將指定Key的Value原子性的遞減1。如果該Key不存在,其初始值為0,在decr之後其值為-1。如果Value的值不能轉換為整型值,如Hello,該操作將執行失敗

並返回相應的錯誤資訊。注意:該操作的取值範圍是64位元有符號整型。

遞減後的Value值。
INCRO(1)  

將指定Key的Value原子性的遞增1。如果該Key不存在,其初始值為0,在incr之後其值為1。如果Value的值不能轉換為整型值,如Hello,該操作將執行失敗

並返回相應的錯誤資訊。注意:該操作的取值範圍是64位元有符號整型。 

遞增後的Value值。 
DECRBY O(1)

將指定Key的Value原子性的減少decrement。如果該Key不存在,其初始值為0,在decrby之後其值為-decrement。如果Value的值不能轉換為整型值,

如Hello,該操作將執行失敗並返回相應的錯誤資訊。注意:該操作的取值範圍是64位元有符號整型。 

減少後的Value值。
INCRBYO(1) 

將指定Key的Value原子性的增加increment。如果該Key不存在,其初始值為0,在incrby之後其值為increment。如果Value的值不能轉換為整型值,如Hello,

該操作將執行失敗並返回相應的錯誤資訊。注意:該操作的取值範圍是64位元有符號整型。 

增加後的Value值。
GETO(1)獲取指定Key的Value。如果與該Key關聯的Value不是string型別,Redis將返回錯誤資訊,因為GET命令只能用於獲取string Value。 與該Key相關的Value,如果該Key不存在,返回nil。
SETO(1)設定該Key持有指定的字串Value,如果該Key已經存在,則覆蓋其原有值。總是返回"OK"。
GETSETO(1)原子性的設定該Key為指定的Value,同時返回該Key的原有值。和GET命令一樣,該命令也只能處理string Value,否則Redis將給出相關的錯誤資訊。返回該Key的原有值,如果該Key之前並不存在,則返回nil。
STRLENO(1)返回指定Key的字元值長度,如果Value不是string型別,Redis將執行失敗並給出相關的錯誤資訊。返回指定Key的Value字元長度,如果該Key不存在,返回0。
SETEXO(1)原子性完成兩個操作,一是設定該Key的值為指定字串,同時設定該Key在Redis伺服器中的存活時間(秒數)。該命令主要應用於Redis被當做Cache伺服器使用時。 
SETNXO(1)如果指定的Key不存在,則設定該Key持有指定字串Value,此時其效果等價於SET命令。相反,如果該Key已經存在,該命令將不做任何操作並返回。1表示設定成功,否則0。
SETRANGE  O(1)

替換指定Key的部分字串值。從offset開始,替換的長度為該命令第三個引數value的字串長度,其中如果offset的值大於該Key的原有值Value的字串長度,

Redis將會在Value的後面補齊(offset - strlen(value))數量的0x00,之後再追加新值。如果該鍵不存在,該命令會將其原值的長度假設為0,並在其後添補offset個

0x00後再追加新值。鑑於字串Value的最大長度為512M,因此offset的最大值為536870911。最後需要注意的是,如果該命令在執行時致使指定Key的原有值

長度增加,這將會導致Redis重新分配足夠的記憶體以容納替換後的全部字串,因此就會帶來一定的效能折損。 

修改後的字串Value長度。
GETRANGEO(1)

如果擷取的字串長度很短,我們可以該命令的時間複雜度視為O(1),否則就是O(N),這裡N表示擷取的子字串長度。該命令在擷取子字串時,將以閉區間的方

式同時包含start(0表示第一個字元)和end所在的字元,如果end值超過Value的字元長度,該命令將只是擷取從start開始之後所有的字元資料。

子字串 
SETBITO(1)

設定在指定Offset上BIT的值,該值只能為1或0,在設定後該命令返回該Offset上原有的BIT值。如果指定Key不存在,該命令將建立一個新值,並在指定

的Offset上設定引數中的BIT值。如果Offset大於Value的字元長度,Redis將拉長Value值並在指定Offset上設定引數中的BIT值,中間新增的BIT值為0。最後需要

說明的是Offset值必須大於0。 

在指定Offset上的BIT原有值。
GETBITO(1)返回在指定Offset上BIT的值,0或1。如果Offset超過string value的長度,該命令將返回0,所以對於空字串始終返回0。在指定Offset上的BIT值。 
MGETO(N)N表示獲取Key的數量。返回所有指定Keys的Values,如果其中某個Key不存在,或者其值不為string型別,該Key的Value將返回nil。返回一組指定Keys的Values的列表。
MSETO(N)N表示指定Key的數量。該命令原子性的完成引數中所有key/value的設定操作,其具體行為可以看成是多次迭代執行SET命令。 該命令不會失敗,始終返回OK。  
MSETNXO(N)

N表示指定Key的數量。該命令原子性的完成引數中所有key/value的設定操作,其具體行為可以看成是多次迭代執行SETNX命令。然而這裡需要明確說明的是,

如果在這一批Keys中有任意一個Key已經存在了,那麼該操作將全部回滾,即所有的修改都不會生效。

String(字串)

append key value 在原有的value上新增值,如果key原先不存在就新建一個key和value不是追加

substr key start len 擷取key,從start開始,擷取len的長度

strlen key 獲取key的長度

incr key 自增1

decr key 自減1

incrby key num 增加key ,增加num

decrby key num 減少key,減少num

getrange key start end 擷取字元key [start,end] 包頭也包尾

setrange key offset value 替換offset位置的資料改成value (offset是key的索引)

setex key seconds value 設定key的過期時間

setnx key value 不存在設定key、value 如果key存在再次新增value會失敗

mset key1 value key2 value 一次性設定多個key、value

mget key1 key2 一次性獲取多個key的value

msetnx key1 value key2 value 一次性設定多個key、value 如果其中一個key存在則全部建立失敗(原子性)

getset key value 如果不存在獲取nil,然後設定值,如果指存在獲取之前的值,在設定後面的value(更新的操作)

###############################################
127.0.0.1:6379> set key1 v
OK
127.0.0.1:6379> get key1
"v"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> append key1 v1
(integer) 3
127.0.0.1:6379> get key1
"vv1"
127.0.0.1:6379> substr key1 0 3
"vv1"
127.0.0.1:6379> strlen key1
(integer) 3
127.0.0.1:6379> append key1 "hello1"
(integer) 9
127.0.0.1:6379> substr key1 1 2
"v1"
127.0.0.1:6379> substr key1 1 1
"v"
127.0.0.1:6379> append key2 "lisi"
(integer) 4
127.0.0.1:6379> get key2
"lisi"
###############################################
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> incrby views 10
(integer) 10
127.0.0.1:6379> decrby views 5
(integer) 5
####################################
127.0.0.1:6379> set key1 "hello,world"
OK
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,world"
127.0.0.1:6379> SETRANGE key2 3 2
(integer) 7
127.0.0.1:6379> get key2
"abc2efg"
########################################
127.0.0.1:6379> setex key3 30 hello
OK
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) 24
127.0.0.1:6379> SETNX mykey redis
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key2"
3) "key1"
127.0.0.1:6379> SETNX mykey "MongoDB"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
####################################
127.0.0.1:6379> mset k1 v1 k2 v2
OK
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> MSETNX k1 v1 k3 v3
(integer) 0
# 物件
# 這裡的key是一個巧妙的設計 user:{id}:{filed} 
127.0.0.1:6379> msetnx user:1:name "zhangsan" user:1:age 2
(integer) 1
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> set article:101:views 0
OK
127.0.0.1:6379> incr article:101:views
(integer) 1
127.0.0.1:6379> get article:101:views
"1"
###########################################################
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db 10
"redis"

String類似的場景:value除了是我們的字串還可以是我們的數位!

  • 計數器
  • 統計多單位的數量 uid:1923:follow 0
  • 粉絲數
  • 物件快取儲存

到此這篇關於Redis中String資料型別的文章就介紹到這了,更多相關Redis String資料型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com