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