redis學習(五) redis過期時間

来源:https://www.cnblogs.com/xiaoxiongcanguan/archive/2018/11/10/9937433.html
-Advertisement-
Play Games

redis過期時間 1.redis過期時間介紹 有時候我們並不希望redis的key一直存在。例如緩存,驗證碼等數據,我們希望它們能在一定時間內自動的被銷毀。redis提供了一些命令,能夠讓我們對key設置過期時間,並且讓key過期之後被自動刪除。 2.redis過期時間相關命令 1.EXPIRE ...


redis過期時間 

  1.redis過期時間介紹

    有時候我們並不希望redis的key一直存在。例如緩存,驗證碼等數據,我們希望它們能在一定時間內自動的被銷毀。redis提供了一些命令,能夠讓我們對key設置過期時間,並且讓key過期之後被自動刪除。

  2.redis過期時間相關命令

    1.EXPIRE PEXPIRE 

    EXPIRE 介面定義:EXPIRE key "seconds"
    介面描述:設置一個key在當前時間"seconds"(秒)之後過期。返回1代表設置成功,返回0代表key不存在或者無法設置過期時間。

 
    PEXPIRE 介面定義:PEXPIRE key "milliseconds"
    介面描述:設置一個key在當前時間"milliseconds"(毫秒)之後過期。返回1代表設置成功,返回0代表key不存在或者無法設置過期時間。

    

    2.EXPIREAT PEXPIREAT

    EXPIREAT 介面定義:EXPIREAT key "timestamp"
    介面描述:設置一個key在"timestamp"(時間戳(秒))之後過期。返回1代表設置成功,返回0代表key不存在或者無法設置過期時間。


    PEXPIREAT 介面定義:PEXPIREAT key "milliseconds-timestamp"
    介面描述:設置一個key在"milliseconds-timestamp"(時間戳(毫秒))之後過期。返回1代表設置成功,返回0代表key不存在或者無法設置過期時間 

    

    3.TTL PTTL

    TTL 介面定義:TTL key
    介面描述:獲取key的過期時間。如果key存在過期時間,返回剩餘生存時間(秒);如果key是永久的,返回-1;如果key不存在或者已過期,返回-2。


    PTTL 介面定義:PTTL key
    介面描述:獲取key的過期時間。如果key存在過期時間,返回剩餘生存時間(毫秒);如果key是永久的,返回-1;如果key不存在或者已過期,返回-2。

    

    4.PERSIST

    PERSIST 介面定義:PERSIST key
    介面描述:移除key的過期時間,將其轉換為永久狀態。如果返回1,代表轉換成功。如果返回0,代表key不存在或者之前就已經是永久狀態。  

    

    5.SETEX

    SETEX 介面定義:SETEX key "seconds" "value"
    介面描述:SETEX在邏輯上等價於SET和EXPIRE合併的操作,區別之處在於SETEX是一條命令,而命令的執行是原子性的,所以不會出現併發問題。

    

3.redis如何清理過期key 

    redis出於性能上的考慮,無法做到對每一個過期的key進行即時的過期監聽和刪除。但是redis提供了其它的方法來清理過期的key。

    1.被動清理

    當用戶主動訪問一個過期的key時,redis會將其直接從記憶體中刪除。

    2.主動清理

    在redis的持久化中,我們知道redis為了保持系統的穩定性,健壯性,會周期性的執行一個函數。在這個過程中,會進行之前已經提到過的自動的持久化操作,同時也會進行記憶體的主動清理。
    在記憶體主動清理的過程中,redis採用了一個隨機演算法來進行這個過程:簡單來說,redis會隨機的抽取N(預設100)個被設置了過期時間的key,檢查這其中已經過期的key,將其清楚。同時,如果其中已經過期的key超過了一定的百分比M(預設是25),則將繼續執行一次主動清理,直至過期key的百分比在概率上降低到M一下。

    3.記憶體不足時觸發主動清理

    在redis的記憶體不足時,也會觸發主動清理。

4.redis記憶體不足時的策略

  redis是一個基於記憶體的資料庫,如果存儲的數據量很大,達到了記憶體限制的最大值,將會出現記憶體不足的問題。redis允許用戶通過配置maxmemory-policy參數,指定redis在記憶體不足時的解決策略。

  

  1.volatile-lru 使用LRU演算法刪除一個鍵(只針對設置了過期時間的key
  2.allkeys-lru 使用LRU演算法刪除一個鍵
  3.volatile-lfu 使用LFU演算法刪除一個鍵(只針對設置了過期時間的鍵)
  4.allkeys-lfu 使用LFU演算法刪除一個鍵
  5.volatile-random 隨機刪除一個鍵(只針對設置了過期時間的鍵)
  6.allkeys-random 隨機刪除一個鍵
  7.volatile-ttl 刪除最早過期的一個鍵
  8.noeviction 不刪除鍵,返回錯誤信息(redis預設選項)

  對於只針對設置了過期時間的鍵進行刪除的策略,在所有的可被刪除的鍵(非永久的鍵)都被刪除時記憶體依然不足,將會拋出錯誤。
  其中,LRU演算法--->最近最少使用演算法,較為註重於時間;LFU演算法--->最近最不常用演算法,較為註重於被訪問頻率。redis的記憶體置換演算法和操作系統中的記憶體置換演算法類似,就不在這裡展開了。

5.redis過期時間總結

  redis的過期時間還有許多的細節值得去深入瞭解,例如持久化時對過期時間的處理,redis周期性的常規操作等等,只有這樣才能更準確的定位問題,解決問題。而想進一步的理解這些知識,除了仔細的思考外,最好的辦法就是通過閱讀源代碼,理解redis的底層運行原理。但是這一目標對於現在的我來說難度過大,希望通過不斷的學習,將來的我能夠做到這一點。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 9. 查詢備份還原資料庫的進度。 select command ,percent_complete ,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, ' +convert(varchar,(est ...
  • 一:分析函數overOracle從8.1.6開始提供分析函數,分析函數用於計算基於組的某種聚合值,它和聚合函數的不同之處是對於每個組返回多行,而聚合函數對於每個組只返回一行。 1、分析函數和聚合函數的不同之處: 分析函數和聚合函數很多是同名的,意思也一樣,只是聚合函數用group by分組,每個分組 ...
  • 原文地址:https://www.cnblogs.com/moyijian/p/9940323.html#4111551 級聯刪除,比如你刪除某個表的時候後面加這個關鍵字,會在刪除這個表的同時刪除和該表有關係的其他對象 1.級聯刪除表中的信息,當表A中的欄位引用了表B中的欄位時,一旦刪除B中該欄位的 ...
  • in 和exists 對於以上兩種查詢條件,in是把外表和內表作hash 連接,而exists 是對外表作loop 迴圈,每次loop 迴圈再對內表進行查詢。 一直以來認為exists 比in 效率高的說法是不准確的。在不同的情況下,exists與in的性能各有優缺項,如果查詢的兩個表大小相當,那麼 ...
  • 啟動命令帶了這個參數:redis.windows.conf,由於我測試環境是windows平臺,所以是這個,有的是redis.conf。顧名思義,redis.conf就是配置文件,然後啟動時加上這個配置文件名的意思就是以配置文件里的配置參數來啟動,比如你設置了密碼,那麼客戶端連接就得輸入密碼了,等等... ...
  • 一.概述 跳躍表(skiplist)是一種有序數據結構,它通過在每個節點中維持多個指向其他節點的指針,從而達到快速訪問節點的目的。在大部分情況下,跳躍表的效率可以和平衡樹(關係型資料庫的索引就是平衡樹結構)相媲美,並且因為跳躍表的實現比平衡樹要來得更為簡單,所以有不少程式使用跳躍表來代替平衡樹。 R ...
  • 簡介 reids,由Salvatore Sanfilippo寫的一個高性能的key-value資料庫,並且它是非關係型資料庫,也就是沒有像mysql那樣多錶鏈接操作,並且它是是完全開源免費的,遵守BSD協議。 ...
  • 一個孩子只有一個媽媽,而一個媽媽可以有多個孩子,這是典型的一對多的關係,這裡採用navicat圖形化界面建立二者的關係。 第一步:創建mother表,如下圖: 第二步:創建children表,在children表中創建一個外鍵ch_mom_id,如下圖: 第三步:在children表中添加外鍵約束 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...