Redis進(jìn)階-Redis的惰性刪除

      網(wǎ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

      Redis進(jìn)階-Redis的惰性刪除

      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)容。

      上一篇:Openiscsi的發(fā)現(xiàn)過程
      下一篇:靠譜的無代碼開發(fā)平臺(tái)(無代碼軟件開發(fā)平臺(tái))
      相關(guān)文章
      97久久国产亚洲精品超碰热| 国产亚洲人成网站在线观看不卡| 亚洲一区二区三区在线观看精品中文 | 日韩亚洲国产综合高清| 亚洲一区二区三区首页| 亚洲爆乳无码一区二区三区| 久久久久亚洲AV无码专区桃色| 亚洲精品高清在线| 亚洲国产免费综合| 亚洲国产精品国产自在在线| 亚洲精品无码AV中文字幕电影网站| 亚洲高清免费视频| 国产成人高清亚洲| 国产亚洲老熟女视频| 国产性爱在线观看亚洲黄色一级片| 久久久久亚洲精品中文字幕| 中文字幕专区在线亚洲| 一本久久a久久精品亚洲| 亚洲精品制服丝袜四区| 亚洲av永久无码精品国产精品| 婷婷精品国产亚洲AV麻豆不片| 亚洲欧洲国产精品你懂的| 亚洲高清无在码在线电影不卡 | 国产精品亚洲专一区二区三区| 亚洲AV电影天堂男人的天堂| 一区国严二区亚洲三区| 亚洲一区二区精品视频| 国产亚洲人成无码网在线观看| 亚洲av色福利天堂| 亚洲剧场午夜在线观看| 亚洲人成色99999在线观看| 日韩亚洲人成网站| 亚洲乳大丰满中文字幕| 亚洲黄色三级视频| 亚洲中文字幕久久精品无码VA| 日韩在线视精品在亚洲| 亚洲色婷婷综合久久| 亚洲午夜视频在线观看| 亚洲国产精品免费观看| 色天使亚洲综合一区二区| 91麻豆国产自产在线观看亚洲|