- 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型別
- 由于博主才疏學淺,難免會有紕漏,假如你發現了錯誤或偏見的地方,還望留言給我指出來,我會對其加以修正,
- 如果你覺得文章還不錯,你的轉發、分享、點贊、留言就是對我最大的鼓勵,
- 感謝您的閱讀,十分歡迎并感謝您的關注,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/154061.html
標籤:其他
