【云圖說】第235期 DDS讀寫兩步走 帶您領(lǐng)略只讀節(jié)點(diǎn)的風(fēng)采
1079
2025-03-31
文章目錄
Pre
del ------> unlink
FLUSHDB/FLUSHALL --> FLUSHDB ASYNC/FLUSHALL ASYNC
異步隊(duì)列
AOF Sync
擴(kuò)展閱讀
Pre
Redis進(jìn)階-Redis對(duì)于過期鍵的三種清除策略
我們一直說 Redis 是單線程的,這里的我們默認(rèn)指的都是Redis主要的工作線程,面向開發(fā)的。 實(shí)際上 Redis 內(nèi)部實(shí)并不是只有一個(gè)主線程,它有很多個(gè)異步線程專門用來處理一些耗時(shí)的操作
del ------> unlink
刪除指令 del 會(huì)直接釋放對(duì)象的內(nèi)存,大部分情況下,這個(gè)指令非常快,沒有明顯延遲。不過
如果刪除的 key 是一個(gè)非常大的對(duì)象,舉個(gè)例子一個(gè)包含幾千萬元素的key,那么刪除操作就會(huì)導(dǎo)致單線程卡頓。
Redis 為了解決這個(gè)卡頓問題,在 4.0 版本引入了 unlink 指令,它能對(duì)刪除操作進(jìn)行懶處理,丟給后臺(tái)線程來異步回收內(nèi)存。
192.168.18.131:8001> set artisan vv -> Redirected to slot [4009] located at 192.168.18.133:8006 OK 192.168.18.133:8006> UNLINK artisan (integer) 1 192.168.18.133:8006> UNLINK artisan (integer) 0 192.168.18.133:8006>
1
2
3
4
5
6
7
8
9
FLUSHDB/FLUSHALL --> FLUSHDB ASYNC/FLUSHALL ASYNC
Redis 提供了 flushdb 和 flushall 指令,用來清空數(shù)據(jù)庫,當(dāng)數(shù)據(jù)量很大時(shí),容易阻塞Redis。
Redis 4.0 同樣給這兩個(gè)指令也帶來了異步化,在指令后面增加 async 參數(shù)扔給后臺(tái)線程銷毀,不會(huì)阻塞當(dāng)前線程。
192.168.18.133:8006> FLUSHDB ASYNC OK 192.168.18.133:8006> FLUSHALL ASYNC OK 192.168.18.133:8006>
1
2
3
4
5
6
異步隊(duì)列
主線程將對(duì)象的引用從「大樹」中摘除后,會(huì)將這個(gè) key 的內(nèi)存回收操作包裝成一個(gè)任務(wù),塞進(jìn)異步任務(wù)隊(duì)列,后臺(tái)線程會(huì)從這個(gè)異步隊(duì)列中取任務(wù)。
任務(wù)隊(duì)列被主線程和異步線程同時(shí)操作,所以必須是一個(gè)線程安全的隊(duì)列。
不是所有的 unlink 操作都會(huì)延后處理,如果對(duì)應(yīng) key 所占用的內(nèi)存很小,延后處理就沒有必要了,這時(shí)候 Redis 會(huì)將對(duì)應(yīng)的 key 內(nèi)存立即回收,跟 del 指令一樣。
AOF Sync
Redis 需要每秒一次(可配置)同步 AOF 日志到磁盤,確保消息盡量不丟失,需要調(diào)用
sync 函數(shù),這個(gè)操作會(huì)比較耗時(shí),會(huì)導(dǎo)致主線程的效率下降,所以 Redis 也將這個(gè)操作移到異步線程來完成。
執(zhí)行 AOF Sync 操作的線程是一個(gè)獨(dú)立的異步線程,和前面的懶惰刪除線程不是一個(gè)線程,同樣它也有一個(gè)屬于自己的任務(wù)隊(duì)列,隊(duì)列里只用來存放 AOF Sync 任務(wù)
redis 4.0這次除了顯示增加unlink、flushdb async、flushall async命令之外,還增加了4個(gè)后臺(tái)刪除配置項(xiàng),分別為:
slave-lazy-flush:slave接收完RDB文件后清空數(shù)據(jù)選項(xiàng)
lazyfree-lazy-eviction:內(nèi)存滿逐出選項(xiàng)
lazyfree-lazy-expire:過期key刪除選項(xiàng)
lazyfree-lazy-server-del:內(nèi)部刪除選項(xiàng),比如rename srckey destkey時(shí),如果destkey存在需要先刪除destkey
以上4個(gè)選項(xiàng)默認(rèn)為同步刪除,可以通過config set [parameter] yes打開后臺(tái)刪除功能。
擴(kuò)展閱讀
redis4.0之lazyfree
Redis數(shù)據(jù)過期和淘汰策略詳解
Redis 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。