超詳細Redis之Key操作API,什麼?看不懂!你來錘我

2020-10-04 19:00:16
  • j3_liuliang
  • Redis常用API即應用場景開始系列(key),如果覺得有用可以關注博主,不定時更新哦!

一、鍵(key)

1.1 TYPE(type)

Redis Type 命令用於返回 key 所儲存的值的型別。

語法

127.0.0.1:6379> TYPE KEY_NAME 

可用版本: >= 1.0.0

返回值

返回 key 的資料型別,資料型別有:

  • none (key不存在)
  • string (字串)
  • list (列表)
  • set (集合)
  • zset (有序集)
  • hash (雜湊表)

案例:

127.0.0.1:6379> set stringkey stringvalue		#設定String型別
OK
127.0.0.1:6379> type stringkey					#返回String
string
127.0.0.1:6379> lpush listkey list01 list02		#設定list型別
(integer) 2
127.0.0.1:6379> type listkey					#返回list
list
127.0.0.1:6379> sadd setkey setvalue			#設定set型別
(integer) 1
127.0.0.1:6379> type setkey						#返回set
set
127.0.0.1:6379> zadd zsetkey 1 "liuliang"		#設定zset型別
(integer) 1
127.0.0.1:6379> type zsetkey					#返回zset
zset
127.0.0.1:6379> hset hashkey name liuliang		#設定hash型別
(integer) 1
127.0.0.1:6379> type hashkey					#返回hash
hash

1.2 PEXPIREAT(pexpireat)

Redis PEXPIREAT 命令用於設定 key 的過期時間,億毫秒記。key 過期後將不再可用。

語法

127.0.0.1:6379> PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

可以版本:>= 1.0.0

返回值:設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

案例

127.0.0.1:6379> set k3 v3						#建立key 並賦值
OK
127.0.0.1:6379> pexpireat k3 5000000000000		#設定過期時間,大於等於這個輸才行1000000000000
(integer) 1
127.0.0.1:6379> ttl k3							#檢視剩餘過期時間
(integer) 3398395525							#單位秒
127.0.0.1:6379> ttl k3
(integer) 3398395522
127.0.0.1:6379> 

1.3 RENAME(rename)

Redis RENAME命令用於修改 key 的名稱 。

語法

127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME

可以版本:>= 1.0.0

返回值:

改名成功時提示 OK ,失敗時候返回一個錯誤。

當 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在時,返回一個錯誤。 當 NEW_KEY_NAME 已經存在時, RENAME 命令 將覆蓋舊值。

案例

###################   第一種情況:重新命名的新key不存在   ###################

127.0.0.1:6379> set j3-liuliang 18				#設定key並賦值
OK
127.0.0.1:6379> rename j3-liuliang liuliang		#重新命名key,新key不存在
OK
127.0.0.1:6379> exists j3-liuliang				#exists判斷key是否存在,0不存在,1存在
(integer) 0
127.0.0.1:6379> exists liuliang
(integer) 1

###################   第二種情況:重新命名的新key存在   ###################

127.0.0.1:6379> set xiaozhang 28				#設定key並賦值
OK
127.0.0.1:6379> rename liuliang xiaozhang		#重新命名key(liuliang),新key(xiaozhang)存在
OK												#重新命名成功
127.0.0.1:6379> exists liuliang					#檢視key是否存在
(integer) 0
127.0.0.1:6379> exists xiaozhang
(integer) 1
127.0.0.1:6379> get xiaozhang					#可以發現,如果重新命名的key存在,則會覆蓋新key的值
"18"

1.4 PERSIST (persist)

Redis PERSIST 命令用於移除給定 key 的過期時間,使得 key 永不過期。

語法

127.0.0.1:6379> PERSIST KEY_NAME

可以版本:>= 2.2.0

返回值:當過期時間移除成功時,返回 1 。 如果 key 不存在或 key 沒有設定過期時間,返回 0 。

案例

127.0.0.1:6379> set j3-liuliang 18			#設定key並賦值
OK
127.0.0.1:6379> expire j3-liuliang 100		#設定過期時間
(integer) 1
127.0.0.1:6379> ttl j3-liuliang				#檢視剩餘過期時間
(integer) 98
127.0.0.1:6379> persist j3-liuliang			#移除key的過期時間
(integer) 1
127.0.0.1:6379> ttl j3-liuliang				#檢視key狀態,-1永久有效
(integer) -1

1.5 MOVE(move)

Redis MOVE 命令用於將當前資料庫的 key 移動到給定的資料庫 db 當中。

語法

127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE

可以版本:>= 1.0.0

返回值:移動成功返回 1 ,失敗則返回 0 。

案例

###################   第一種情況:key存在於當前資料庫中(移動成功,當前庫不存在key目標庫存在key)   ###################
127.0.0.1:6379> select 0					#切換資料庫,預設就是 0 號資料庫
OK
127.0.0.1:6379> set j3-liuliang 18			#設定key並複製
OK
127.0.0.1:6379> move j3-liuliang 1			#移動key到 1 號資料庫
(integer) 1
127.0.0.1:6379> exists j3-liuliang			#檢視當前資料庫是否存在key
(integer) 0
127.0.0.1:6379> select 1					#切換資料庫
OK
127.0.0.1:6379[1]> exists j3-liuliang		#檢視當前資料庫是否存在key
(integer) 1
127.0.0.1:6379[1]> 

###################   第二種情況:key不存在於當前資料庫中(移動失敗,因為key根本不存在)   #################
127.0.0.1:6379> flushall					#清空所有資料庫資料 0-15
OK
127.0.0.1:6379> exists j3-liuliang			#檢視當前資料庫是否存在key
(integer) 0
127.0.0.1:6379> move j3-liuliang 1			#將一個不存在的key移動到 1 號資料庫
(integer) 0									#返回 0 說明已經失敗了
127.0.0.1:6379> select 1					#切換資料庫
OK
127.0.0.1:6379[1]> exists j3-liuliang		#檢視當前資料庫是否存在key
(integer) 0									#顯然不存在
127.0.0.1:6379[1]> 

###################   第三種情況:當源資料庫和目標資料庫有相同的 key 時(結論移動失敗,不做任何變化)   ####
127.0.0.1:6379[1]> flushall					#清空所有資料庫資料 0-15
OK
127.0.0.1:6379[1]> set j3-liuliang 28		#在當前資料庫設定一個key
OK
127.0.0.1:6379[1]> select 0					#切換資料庫
OK
127.0.0.1:6379> set j3-liuliang 18			#設定和上一個資料庫中相同的一個key,值不要一樣,便於區分
OK
127.0.0.1:6379> move j3-liuliang 1			#將當前資料庫中key移動到上一個資料庫中
(integer) 0									#發現,移動失敗,說明,當兩個資料庫中有相同的key時,會移動失敗
127.0.0.1:6379> get j3-liuliang				#獲取當前資料庫中key,發現沒有變化
"18"
127.0.0.1:6379> select 1					#切換資料庫
OK
127.0.0.1:6379[1]> get j3-liuliang			#發現也沒有變化
"28"
127.0.0.1:6379[1]> 

1.6 RANDOMKEY(randomkey)

Redis RANDOMKEY 命令從當前資料庫中隨機返回一個 key 。

語法

127.0.0.1:6379> RANDOMKEY 

可以版本:>= 1.0.0

返回值:當資料庫不為空時,返回一個 key 。 當資料庫為空時,返回 nil 。

案例

127.0.0.1:6379> flushall								#清空所有資料庫資料
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5		#一次設定多個key value
OK
127.0.0.1:6379> keys *									#檢視資料庫說有key
1) "k4"
2) "k5"
3) "k1"
4) "k2"
5) "k3"
127.0.0.1:6379> randomkey								#隨機輸出一個key
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k1"
127.0.0.1:6379> flushall								#情況所有資料庫資料
OK
127.0.0.1:6379> randomkey								#發現輸出為 nil
(nil)
127.0.0.1:6379> 

1.7 DUMP(dump)

Redis DUMP 命令用於序列化給定 key ,並返回被序列化的值。

語法

127.0.0.1:6379> DUMP KEY_NAME

可以版本:>= 2.6.0

返回值:如果 key 不存在,那麼返回 nil 。 否則,返回序列化之後的值。

案例

127.0.0.1:6379> flushall					#清空所有資料庫
OK
127.0.0.1:6379> set j3-liuliang 18			#設定key並賦值
OK
127.0.0.1:6379> dump j3-liuliang			#將給定的key序列化
"\x00\xc0\x12\t\x00\x9d+/\x83A\xa7'\x9a"	#key序列後的值
127.0.0.1:6379> dump not-exists-key			#序列化不存在的值
(nil)										#返回nil
127.0.0.1:6379> 

1.8 TTL(ttl)

Redis TTL 命令以秒為單位返回 key 的剩餘過期時間。

語法

127.0.0.1:6379> TTL KEY_NAME

可以版本:>= 1.0.0

返回值:

當 key 不存在時,返回 -2 。 當 key 存在但沒有設定剩餘生存時間時,返回 -1 。 否則,以毫秒為單位,返回 key 的剩餘生存時間。

**注意:**在 Redis 2.8 以前,當 key 不存在,或者 key 沒有設定剩餘生存時間時,命令都返回 -1 。

案例

127.0.0.1:6379> flushall					#清空所有資料庫資料
OK
127.0.0.1:6379> ttl j3-liuliang				#判斷一個不存在的key
(integer) -2
127.0.0.1:6379> set j3-liuliang 18			#設定key並賦值
OK
127.0.0.1:6379> ttl j3-liuliang				#檢視存在的key但沒有設定過期時間
(integer) -1
127.0.0.1:6379> expire j3-liuliang 100		#給存在的key設定過期時間
(integer) 1
127.0.0.1:6379> ttl j3-liuliang				#檢視剩餘過期時間(秒)
(integer) 98
127.0.0.1:6379> 

1.9 EXPIRE(expire)

Redis Expire 命令用於設定 key 的過期時間。key 過期後將不再可用。

語法

127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS

可以版本:>= 1.0.0

返回值:

設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

案例

127.0.0.1:6379> flushall					#清空所有資料庫資料
OK
127.0.0.1:6379> set j3-liuliang 18			#設定key並賦值
OK
127.0.0.1:6379> expire j3-liuliang 100		#給存在的key設定過期時間
(integer) 1
127.0.0.1:6379> ttl j3-liuliang				#檢視剩餘過期時間(秒)
(integer) 88
127.0.0.1:6379> 

以上範例中我們為鍵 j3-liuliang設定了過期時間為 100秒,100秒後該鍵會自動刪除。

1.10 DEL(del)

Redis DEL 命令用於刪除已存在的鍵。不存在的 key 會被忽略。

語法

127.0.0.1:6379> DEL KEY_NAME

可以版本:>= 1.0.0

返回值:被刪除 key 的數量。

案例

127.0.0.1:6379> flushall		#清空所有資料庫資料
OK
127.0.0.1:6379> set k1 v1		#設定key並賦值
OK
127.0.0.1:6379> del k1			#刪除key
(integer) 1						#返回刪除的數量
127.0.0.1:6379> del k2			
(integer) 0						#返回刪除的數量 0 說明沒有改變什麼,表明該值不存在
127.0.0.1:6379> 

1.11 PTTL(pttl)

Redis PTTL命令以毫秒為單位返回 key 的剩餘過期時間。

語法

127.0.0.1:6379> PTTL KEY_NAME

可以版本:>= 2.6.0

返回值:

當 key 不存在時,返回 -2 。 當 key 存在但沒有設定剩餘生存時間時,返回 -1 。 否則,以毫秒為單位,返回 key 的剩餘生存時間。

**注意:**在 Redis 2.8 以前,當 key 不存在,或者 key 沒有設定剩餘生存時間時,命令都返回 -1 。

案例

127.0.0.1:6379> flushall					#清空所有資料庫資料
OK
127.0.0.1:6379> set j3-liuliang 18			#設定key並賦值
OK
127.0.0.1:6379> expire j3-liuliang 100		#設定過期時間
(integer) 1
127.0.0.1:6379> pttl j3-liuliang			#返回key的剩餘時間,毫秒
(integer) 91266
127.0.0.1:6379> pttl key					#檢視不存在key的剩餘時間,毫秒
(integer) -2
127.0.0.1:6379> set k1 v1					#設定key並賦值
OK
127.0.0.1:6379> pttl k1						#檢視沒有設定過期時間的key
(integer) -1
127.0.0.1:6379> 

1.12 RENAMENX(renamenx)

Redis Renamenx 命令用於在新的 key 不存在時修改 key 的名稱 。

語法

127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME

可以版本:>= 1.0.0

返回值:修改成功時,返回 1 。 如果 NEW_KEY_NAME 已經存在,返回 0 。

案例

###################   第一種情況:newkey不存在(改名成功)   ###################
127.0.0.1:6379> flushall						#清空資料庫
OK
127.0.0.1:6379> set j3-liuliang 18				#設定key並賦值
OK
127.0.0.1:6379> renamenx j3-liuliang liuliang	#將key設定新值,新值不存在
(integer) 1
127.0.0.1:6379> exists j3-liuliang				#判斷老key是否還存在
(integer) 0
127.0.0.1:6379> get j3-liuliang					#判斷是否還可以取到老key的值
(nil)
127.0.0.1:6379> exists liuliang					#判斷新key是否存在
(integer) 1
127.0.0.1:6379> get liuliang					#獲取新key的值
"18"
127.0.0.1:6379>

###################   第二種情況:newkey存在(改名失敗,不做變化)   ###################
127.0.0.1:6379> flushall			#清空資料庫
OK
127.0.0.1:6379> set k1 v1			#設定key並賦值
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> renamenx k1 k2		#將key設定新值,新值存在
(integer) 0							#重新命名失敗
127.0.0.1:6379> get k1				#沒有任何變化
"v1"
127.0.0.1:6379> get k2				#沒有任何變化
"v2"
127.0.0.1:6379>

1.13 EXISTS(exists)

Redis EXISTS 命令用於檢查給定 key 是否存在。

語法

127.0.0.1:6379> EXISTS KEY_NAME

可以版本:>= 1.0.0

返回值:若 key 存在返回 1 ,否則返回 0 。

案例

127.0.0.1:6379> flushall		#清空資料庫
OK
127.0.0.1:6379> exists k1		#判斷key是否存在
(integer) 0						#不存在
127.0.0.1:6379> set k1 v1		#設定key並賦值
OK
127.0.0.1:6379> exists k1		#判斷key是否存在
(integer) 1						#存在
127.0.0.1:6379>

1.14 EXPIREAT(expireat)

EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設定過期時間。 不同在於 EXPIREAT 命令接受的時間引數是 UNIX 時間戳(unix timestamp)。

Redis Expireat 命令用於以 UNIX 時間戳(unix timestamp)格式設定 key 的過期時間。key 過期後將不再可用。

語法

127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

可以版本:>= 1.0.0

返回值:

設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

案例

127.0.0.1:6379> flushall							#清空資料庫
OK
127.0.0.1:6379> set j3-liuliang 18					#設定key並賦值
OK
127.0.0.1:6379> expireat j3-liuliang 1293840000		#給key設定過期時間,時間是時間戳
(integer) 1
127.0.0.1:6379> ttl j3-liuliang						#檢視剩餘過期時間
(integer) -2
127.0.0.1:6379> exists j3-liuliang					#檢視key是否還存在
(integer) 0
127.0.0.1:6379> 

1.15 KEYS(keys)

Redis Keys 命令用於查詢所有符合給定模式 pattern 的 key 。。

語法

127.0.0.1:6379> KEYS PATTERN

可以版本:>= 1.0.0

返回值:符合給定模式的 key 列表 (Array)。

案例

127.0.0.1:6379> flushall		#清空資料庫
OK
127.0.0.1:6379> set k1 v1		#建立一些key
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set m1 n1
OK
127.0.0.1:6379> set m2 n2
OK
127.0.0.1:6379> keys k*			#查詢所有符合 k* 的key
1) "k1"
2) "k2"
127.0.0.1:6379> keys m*			#查詢所有符合 m* 的key
1) "m2"
2) "m1"
127.0.0.1:6379> keys *			#查詢所有的key
1) "m2"
2) "k1"
3) "m1"
4) "k2"
127.0.0.1:6379> 

結束語

  • 本文結合Redis中文網和博主的實踐案例所寫,下期寫String型別
  • 由於博主才疏學淺,難免會有紕漏,假如你發現了錯誤或偏見的地方,還望留言給我指出來,我會對其加以修正。
  • 如果你覺得文章還不錯,你的轉發、分享、點贊、留言就是對我最大的鼓勵。
  • 感謝您的閱讀,十分歡迎並感謝您的關注。

在這裡插入圖片描述