0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Redis 如何刪除數(shù)據(jù)

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 16:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Redis 中所有的鍵都可以設置過期策略,就像是所有的鍵都可以上"生死簿",上了生死簿的鍵到時間后閻王就會叉掉這個鍵。同一時間大量的鍵過期,閻王就會忙不過來。同時因為 Redis 是單線程的,導致閻王的處理時間會變得很長,而且處理繁忙,Redis 就會出現(xiàn)卡頓現(xiàn)象。

Redis 有三種策略刪除過期 Key

相關命令

expire key seconds  # 過期時間為秒數(shù),key 不存在時返回(integer) 0,key 存在的時返回(integer) 1

pexpire key milliseconds # 同 expire,設置的過期時間為毫秒數(shù)

setex key seconds value # 只能設置字符串的過期時間

ttl key # 查看 Key 的過期時間(秒數(shù)),用不過期返回(integer) -1Key 不存在返回(integer) -2

pttl key # 同 ttl,返回毫秒數(shù)

過期 Key

Redis 的每個設置了過期時間的 Key 都會放在一個獨立的字典中,用于遍歷刪除。

過期策略

被動刪除

Key 在被操作時,Redis 主動檢查 Key 是否過期,過期則刪除,返回 nil

  1. CPU 友好,只有 Key 在被操作時刪除,不會浪費 CPU 時間
  2. 對內存不友好,如果同時有大量的 Key 過期,這些 Key 在被使用之前不會被刪除,就會浪費內存

主動刪除

Redis 會周期性的隨機掃描一批設置了過期時間的 Key 并進行處理,Redis 每秒進行10次過期掃描會做的操作有:

  1. 隨機掃描100個設置了過期時間的 Key
  2. 刪除所有發(fā)現(xiàn)的過期 Key
  3. 如果刪除的 Key 超過1/4則重復步驟1
hz 10

Redis 除了設置每秒10次的掃描頻率之外,還設置了每次掃描不會超過25ms 的上限,以防出現(xiàn)過度循環(huán)掃描,導致線程卡死。

maxmemory

# maxmemory

當已用的內存超過 maxmemory 配置的內存時,會觸發(fā)主動清除策略

# maxmemory-policy noeviction
  1. noeviction 永不過期策略,當已用內存超過 maxmemory 配置時,寫操作將返回錯誤,讀操作和 del 操作可以繼續(xù)服務。
  2. volatile-lru 只刪除設置了過期時間的 Key,使用頻率越少的 Key 優(yōu)先刪除,不會對沒有設置過期時間的 Key 刪除
  3. volatile-ttl 和上面一樣,只刪除設置過期時間的 Key,TTL 過期時間越少優(yōu)先刪除
  4. volatile-random 隨機刪除快要過期的 Key
  5. allkeys-lru 和 lru 一樣,刪除所有的 Key,沒有設置過期時間的 Key 也會被刪除
  6. allkeys-random 和上面一樣,刪除掉隨機的 Key

Redis 采用的過期策略

被動刪除+主動刪除

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11076

    瀏覽量

    217012
  • 數(shù)據(jù)

    關注

    8

    文章

    7256

    瀏覽量

    91820
  • key
    key
    +關注

    關注

    0

    文章

    53

    瀏覽量

    13085
  • Redis
    +關注

    關注

    0

    文章

    386

    瀏覽量

    11440
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    我用labSQL中的ADO Recordset Delete Record.vi 函數(shù)刪除數(shù)據(jù)庫中的一

    求助:我用labSQL中的ADO Recordset Delete Record.vi 函數(shù)刪除數(shù)據(jù)庫中的一行記錄,為啥不得行呢?運行之后,數(shù)據(jù)庫里面并沒有刪除?。砍霈F(xiàn)的問題是:ADO
    發(fā)表于 12-02 14:57

    請問LabVIEW如何刪除數(shù)組中的空白元素

    請問LabVIEW如何刪除數(shù)組中的空白元素還有如何把一行一行的字符串組成的數(shù)組分別填寫到表格中
    發(fā)表于 02-17 13:19

    刪除數(shù)組元素

    刪除數(shù)組元素作為條件結構的條件輸入端是怎么回事啊。。。
    發(fā)表于 03-30 15:51

    刪除數(shù)組里指定的多個相同元素

    如題,如何刪除數(shù)組里指定的多個相同元素,求大神指導、、、
    發(fā)表于 12-26 13:32

    在labview使用sql語句刪除數(shù)據(jù)庫中的重復內容出現(xiàn)錯誤,求解

    最近一直在自學使用labview控制數(shù)據(jù)庫,相關的書籍資料都不多,有相同興趣的歡迎溝通互相學習使用labsql一直出現(xiàn)問題,之前排序的運行成功卻發(fā)現(xiàn)只是對查詢數(shù)據(jù)進行排序不能對本身這次需要刪除數(shù)據(jù)庫中重復內容,我查找了相關語句,
    發(fā)表于 03-07 12:30

    刪除數(shù)字字符串無效零

    看到有人問怎么刪除數(shù)字字符串的無效零,所以在這里發(fā)一下!可以像圖中這樣使用
    發(fā)表于 01-03 19:42

    刪除數(shù)組中的零元素

    提供了兩種刪除數(shù)組零元素的方法,前一種略麻煩,重新設計了一種,可能是我知道的最簡單粗暴的版本了吧
    發(fā)表于 03-22 22:37

    《Visual C# 2008程序設計經(jīng)典案例設計與實現(xiàn)》---動態(tài)刪除數(shù)據(jù)數(shù)據(jù)信息

    《Visual C# 2008程序設計經(jīng)典案例設計與實現(xiàn)》---動態(tài)刪除數(shù)據(jù)數(shù)據(jù)信息.zip
    發(fā)表于 06-25 16:48

    如何使得redis中的數(shù)據(jù)不再有

    嵌入式Linux系統(tǒng)重啟后如何使得redis中的數(shù)據(jù)不再有今天在工作中遇到一個問題:網(wǎng)頁展示redis中的數(shù)據(jù),然而再Linux系統(tǒng)重啟后網(wǎng)頁還能展示
    發(fā)表于 11-05 08:50

    JAVA教程之創(chuàng)建與刪除數(shù)據(jù)庫中的表

    JAVA教程之創(chuàng)建與刪除數(shù)據(jù)庫中的表,很好的JAVA的資料,快來學習吧。
    發(fā)表于 04-13 09:47 ?3次下載

    手機如何永久刪除數(shù)據(jù)

    為了保護隱私,在切換舊手機之前,需要完全清除手機數(shù)據(jù)。它一直是我們恢復出廠設置的最常用方法?;謴统鰪S設置的舊手機,其他人仍然可以恢復已刪除的照片、數(shù)據(jù)。那么如何徹底刪除舊手機上的
    的頭像 發(fā)表于 03-01 14:53 ?3w次閱讀

    如何才能刪除SQL數(shù)據(jù)局鏡像

    SQLSERVER刪除數(shù)據(jù)庫鏡像 SQLServer刪除數(shù)據(jù)庫鏡像,其實這之前有個很詭異的問題。..在數(shù)據(jù)庫鏡像斷開后,如何從新建立鏡像的連接呢?
    發(fā)表于 09-26 17:51 ?18次下載

    微軟「全息云存儲」來了!玻璃做介質,用光記錄或刪除數(shù)據(jù)

    你能想象嗎,未來有望實現(xiàn) 全系存儲了!什么意思呢,就是利用光來記錄數(shù)據(jù)頁、玻璃作為介質實現(xiàn)云上存儲。全息晶體可以填充密集的數(shù)據(jù),若想刪除數(shù)據(jù),只需用紫外光就能擦除,也太酷了吧! 這是微軟研究院的一項
    的頭像 發(fā)表于 10-27 13:39 ?3439次閱讀

    Redis數(shù)據(jù)清理策略

    本文整理 Redis數(shù)據(jù)清理策略所有代碼來自 Redis version :5.0, 不同版本的 Redis 策略可能有調整
    發(fā)表于 09-19 14:24 ?600次閱讀
    <b class='flag-5'>Redis</b> 的<b class='flag-5'>數(shù)據(jù)</b>清理策略

    Redis刪除策略和內存淘汰機制介紹

    執(zhí)行之前都會調用 expireIfNeeded函數(shù)對其進行檢查,如果過期,則刪除該鍵,然后執(zhí)行鍵不存在的操作;未過期則不作操作,繼續(xù)執(zhí)行原有的命令。 定期刪除:由Redis.c/activeExpireCycle 函數(shù)實現(xiàn),函數(shù)
    的頭像 發(fā)表于 10-09 11:06 ?709次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品