這篇文章主要介紹redis鍵管理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)主營(yíng)織金網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開(kāi)發(fā),織金h5小程序制作搭建,織金網(wǎng)站營(yíng)銷(xiāo)推廣歡迎織金等地區(qū)企業(yè)咨詢(xún)
單個(gè)鍵管理
1.鍵重命名
rename key newkey
我們看rename命令確實(shí)是可以給鍵重命名,但如果執(zhí)行rename命令時(shí)新的鍵已經(jīng)存在的,那么rename命令會(huì)將新的鍵的鍵的值替換掉。也就是如下圖所示:
當(dāng)然既然使用rename命令是有風(fēng)險(xiǎn)的,所以Redis為了保證給鍵重命名的安全性于是提供了renamenx命令,顧名思義,renamenx命令就是保證當(dāng)前新的鍵不存在時(shí),給鍵重命名命令才可以成功。
如上圖所示,當(dāng)renamenx命令給鍵重命名時(shí),如果重命名的鍵是存在的,則renamenx命令返回0,表示當(dāng)前命令執(zhí)行失敗,否則返回1,則表示成功。
下面我們了解一下在使用rename命令或者renamenx命令時(shí)的注意事項(xiàng)。
由于在使用rename命令或者renamenx命令時(shí)會(huì)執(zhí)行del命令刪除舊的鍵,所以如果舊的鍵中的值比較大時(shí),可能會(huì)存在阻塞的情況。
如果在使用rename命令或者renamenx命令時(shí),如果新的鍵與舊的鍵是相同時(shí),則上述命令時(shí)可以執(zhí)行成功的,但在Redis3.2之前版本會(huì)報(bào)錯(cuò)。
2.隨機(jī)返回一個(gè)鍵
randomkey
3.鍵過(guò)期
expire key seconds
expireat key timestamp
ttl命令和pttl命令都可以查詢(xún)鍵的剩余過(guò)期時(shí)間,但是pttl命令精度更高可以支持毫秒級(jí)。下面我們看一下ttl命令和pttl命令的返回值。
大于等于0的整數(shù):鍵剩余的過(guò)期時(shí)間(ttl秒,pttl毫秒)。
-1:鍵沒(méi)有設(shè)置過(guò)期時(shí)間
-2:鍵不存在
下面我們看一下expireat命令。
expireat命令可以直接設(shè)置鍵的毫秒過(guò)期時(shí)間戳。除此之外Redis2.6版本之后還支持了毫秒級(jí)的過(guò)期時(shí)間。
pexpire key milliseconds
pexpireat key milliseconds-timestamp
下面我們介紹一下在使用上述命令時(shí)的注意事項(xiàng)。
如使用上述命令時(shí)如果鍵不存在時(shí),則直接返回0,表示該操作執(zhí)行失敗。
如果使用上述命令時(shí)過(guò)期時(shí)間設(shè)置為負(fù)數(shù),則當(dāng)前鍵直接過(guò)期,并且會(huì)直接刪除,相當(dāng)于執(zhí)行del命令。
persist命令可以將鍵的過(guò)期時(shí)間清除。
對(duì)于字符串類(lèi)型的鍵,在執(zhí)行set命令時(shí),會(huì)默認(rèn)去掉過(guò)期時(shí)間,在這點(diǎn)要特別注意,很容易忽視。
Redis不支持二級(jí)數(shù)據(jù)結(jié)構(gòu)內(nèi)部元素的過(guò)期功能,例如不能設(shè)置列表或者集合類(lèi)型中的某個(gè)元素設(shè)置過(guò)期時(shí)間。
setnx命令作為set + expire組合,不但是原子性的,同時(shí)還減少了一次網(wǎng)絡(luò)通訊時(shí)間。
4.遷移鍵
顧名思義遷移鍵就是將鍵從一個(gè)地方遷移到另一個(gè)地方。比如將鍵從生產(chǎn)環(huán)境遷移到測(cè)試環(huán)境等等。在Redis中提供了3種方式來(lái)支持鍵的遷移功能,它們分別是move、dump + restore、migrate3種。但它們的底層實(shí)現(xiàn)方式,及使用場(chǎng)景均不太一樣。下面我們?cè)敿?xì)了解一下。
(1)、move
move key db
move命令是在Redis的內(nèi)部進(jìn)行數(shù)據(jù)遷移,在Redis中實(shí)際上有多個(gè)數(shù)據(jù)庫(kù)的,所以move命令就是將指定的鍵從源數(shù)據(jù)庫(kù)移動(dòng)目標(biāo)數(shù)據(jù)庫(kù)中。Redis中數(shù)據(jù)庫(kù)相關(guān)的知識(shí),我們將在后續(xù)的文章中在做介紹。
(2)、dump + restore
dump key
restore key ttl serialized-value [REPLACE]
dump + restore也可以實(shí)現(xiàn)Redis中不同實(shí)例之間的數(shù)據(jù)遷移。但和move命令不同dump + restore要分2部實(shí)現(xiàn),下面我們?cè)敿?xì)了解一下。
在源數(shù)據(jù)庫(kù)上使用dump命令將鍵值序列化,格式采用的是RDB格式。
在目標(biāo)數(shù)據(jù)庫(kù)中使用restore命令將上一步中的序列化的值進(jìn)行復(fù)原,其中ttl參數(shù)表示過(guò)期時(shí)間,如果ttl等于0則表示沒(méi)有過(guò)期時(shí)間。
下面我們看一下dump + restore方式的注意事項(xiàng)。
整個(gè)遷移的過(guò)程中并非原子性的,而是通過(guò)客戶(hù)端分步完成的。
遷移的過(guò)程中是在兩個(gè)客戶(hù)端進(jìn)行的,所以dump的結(jié)果不是在源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)之間進(jìn)行的。
下面我們完整演示一下使用dump + restore命令怎么遷移鍵。
1)、在源Redis中執(zhí)行dump。
2)、在目標(biāo)Redis中執(zhí)行restore。
我們上述操作中啟用了2個(gè)客戶(hù)端,一個(gè)端口為6379另一個(gè)端口為6380。如果在使用dump和restore命令時(shí),如果都在同一個(gè)端口客戶(hù)端中進(jìn)行時(shí),Redis會(huì)返回錯(cuò)誤。
(3)、migrate
migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]
在Redis中migrate命令也可以實(shí)現(xiàn)鍵的遷移功能,它和上述的其它遷移命令相比,不同的就是migrate命令就是將dump、restore、del命令組合在了一起,并且簡(jiǎn)化了操作流程。而且migrate命令還支持原子性操作。下面我們看一下使用migrate命令與dump + restore命令之間的不同之處。
migrate命令整個(gè)過(guò)程都是原子性的,并且不需要開(kāi)啟多個(gè)Redis客戶(hù)端。
migrate命令的數(shù)據(jù)傳輸直接在源Redis和目標(biāo)Redis中完成。
目標(biāo)Redis完成restore后會(huì)發(fā)送OK給源Redis,源Redis接受后會(huì)根據(jù)migrate對(duì)應(yīng)的選項(xiàng)來(lái)決定是否在源Redis上刪除對(duì)應(yīng)的鍵。
下面我們?cè)敿?xì)看一下migrate命令的相關(guān)參數(shù)。
- host:目標(biāo)Redis的IP地址。
- port:目標(biāo)Redis的端口。
- key|"":在Redis3.0.6版本之前,migrate只支持遷移一個(gè)鍵,所以此處就是要遷移的鍵,但Redis3.0.6版本之后是可以支持遷移多個(gè)鍵了,所以如果當(dāng)前要遷移多個(gè)鍵時(shí),此處為空字符串“”。
- destination-db:目標(biāo)Redis的數(shù)據(jù)庫(kù)索引,因?yàn)樯厦嫣岬竭^(guò)在Redis是有多個(gè)數(shù)據(jù)庫(kù)存在的,但相關(guān)的知識(shí)后續(xù)在做詳細(xì)介紹,這里我們只要先知道這個(gè)概念就可以了。
- timeout:鍵遷移的超市時(shí)間(單位毫秒)。
- [copy]:如果添加此選項(xiàng),遷移后并不刪除源鍵。
- [replace]:如果添加此選項(xiàng),migrate不管目標(biāo)Redis是否存在該鍵都會(huì)進(jìn)行數(shù)據(jù)遷移,并且覆蓋。
- [keys key [key ...]]:遷移多個(gè)鍵,遷移多少,就寫(xiě)多少鍵。
下面我們演示一下通過(guò)migrate命令怎么遷移Redis中的鍵。
1)、源Redis有要遷移的鍵,而目標(biāo)Redis中沒(méi)有:
下面我們執(zhí)行以下命令:
migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]
在使用migrate命令遷移鍵時(shí),有一點(diǎn)要特別注意,就是migrate命令在執(zhí)行時(shí),要在源Redis中執(zhí)行,如果在目標(biāo)Redis中執(zhí)行時(shí),是不會(huì)遷移成功的,也就是如上圖所示。
2)、源Redis和目標(biāo)Redis都有要遷移的鍵。
在使用migrate命令遷移鍵時(shí)如果沒(méi)有添加replace參數(shù)時(shí),則Redis會(huì)顯示錯(cuò)誤,并且如果不添加copy命令時(shí),當(dāng)鍵成功遷移后,源Redis中的遷移鍵,將被刪除。
3)、源Redis中沒(méi)有要遷移的鍵。
下面我們演示一下批量遷移多個(gè)鍵的操作:
下面我們來(lái)比對(duì)一下上述3種鍵遷移的不同。
以上是“Redis鍵管理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!