【redis】全局命令exists、del、expire、ttl(惰性刪除和定期刪除)

exists——判定 key 是否存在

語法:

exists key [key...]
# 返回值:key 存在的個數
  • 針對多個 key 來說,是非常有用的
  • 時間復雜度 O ( 1 ) O(1) O(1)image.png
    Redis 組織這些 key 就是按照哈希表的方式來組織的。Redis 支持很多數據結構指的是 value 可以是一些復雜的數據結構
    Redis 自身的這些鍵值對,是通過哈希表的方式來組織的,Redis 具體的值,又可以是一些數據結構
  • Redis 是一個客戶端-服務器結構的程序,客戶端和服務器之間通過網絡來進行通信
  • 每次我們敲的命令,都是由 Redis 客戶端包裝成一個請求,發送給 Redis 服務器,服務器再返回響應
  • 因此最好不要把 key 分開寫。分開寫會產生更多輪次的網絡通信,效率比較低,成本比較高

[!qoute] 封裝和分用

  • 進行網絡通信的時候,發送方發送一個數據,這個數據就要從應用層,到物理層,層層封裝(每一層協議都要加上報頭或者尾)==>發送一個快遞,要包裝一下,要包裝好多層
  • 接收方收到一個數據,這個數據就要從物理層,到應用層,層層分用(把每一層協議中的報頭或者尾給拆掉)==>收到一個快遞,要拆快遞,拆很多層
  • 這些過程都是要消耗時間,消耗 CPU

Redis 自身也非常清楚上述問題,所以 Redis 的很多命令都支持一次就能操作多個 key 的/多種操作

del——刪除指定的 key

可以一次刪除一個或者多個


語法:

del key [key...]
  • 時間復雜度 O ( 1 ) O(1) O(1)
  • 返回值:刪除掉的 key 的個數

MySQL 中,刪除類的操作

  • drop database
  • drop table
  • drop from
    這些都是非常危險的操作,一旦刪除之后,數據就沒了。但在 Redis 中,危險程度就小很多了
  • 因為 Redis 的主要應用場景,就是作為緩存,里面存的只是一個熱點數據,而全量數據是在 MySQL 中。如果把 Redis 中的 key 刪除了幾個,問題不大,大不了再從 MySQL 中讀就可以了。
  • 但是如果把所有的數據,或者一大半數據都干沒了,這種影響就會很大。本來是靠 RedisMySQL 負重前行,Redis 沒數據了,大部分請求就直接打給 MySQL 了,然后就容易把 MySQL 搞掛
  • 相比之下,如果是 MySQL 這樣的數據,哪怕誤刪了一個數據,都可能影響是很大的
  • 但如果是把 Redis 作為數據庫,此時誤刪數據的影響就大了

expire——給 key 設置過期時間

單位為秒

key 存活時間超過這個 expire 指定的值,就會被自動刪除

  • 在很多業務場景,都是有時間限制的
    • 驗證碼。要實現驗證碼一分鐘失效的功能,我們就可以把這個驗證碼信息存儲到 Redis 中,將 expire 設置為 60,等到一分鐘后 Redis 里面的驗證碼信息被刪除,就查詢不到了
    • 點外賣。優惠券,在指定時間有效
    • 分布式鎖。基于 Redis 實現分布式鎖,為了避免出現不能正確解鎖的情況,通常都會在加鎖的時候設置一下過期事假(所謂的使用 Redis 作為分布式鎖,就是給 Redis 里寫一個特殊的 key value

語法:

expire key seconds
pexpire key 毫秒
  • 對于計算機來說,秒是一個非常長的時間,下面的時間單位是毫秒

ttl——查詢過期時間

time to live

在網絡原理,IP 協議報頭中,就有一個 TTL 字段

  • IP 中的 TTL 不是用時間衡量過期的,而是次數

查詢當前 key 的過期時間還剩多少
語法:

ttl key    //秒
pttl key   //毫秒
  • 返回剩余過期時間
  • 返回 -1 表示沒有關聯過期時間
  • 返回 -2 表示 key 不存在

過期策略是如何實現的

#高頻面試
一個 Redis 中可能同時存在很多很多 key,這些 key 中有很大一部分都有過期時間。此時,Redis 服務器怎么知道哪些 key 已經過期要被刪除,哪些 key 還沒過期?

  • 如果直接遍歷所有的 key,顯然是行不通的,效率非常低
  • Redis 整體的策略是兩方面
    1. 定期刪除
    2. 惰性刪除

惰性刪除

  • 假設這個 key 已經到達過期時間了,但是暫時還沒刪除它,key 還在
  • 緊接著,后面又一次訪問,正好用到了這個 key,于是這次訪問就會讓 Redis 服務器觸發刪除 key 的操作,同時再放回一個 nil
  • 你去超市買水,正要付錢的時候,看了一眼日期,發現過期了,于是老板就說不賣了,于是就把這瓶水下架了,這就是“惰性刪除
  • 老板也不清楚哪些過期了,哪些沒過期,就在賣出的時候做一次檢查,如果過期了就不賣了,如果還沒過期,就繼續賣

但顯然,單靠惰性刪除肯定是不靠譜的,一個超市這么多商品,怎么可能全去靠用戶去檢查,所以肯定還得要有一個輔助的機制——定期刪除

定期刪除

這個超市老板,要定期查看超市里面的商品,看是否有過期產品

  • 但是如果超市商品很多,那么每次遍歷一遍就非常慢
  • 所以,每次抽取一部分,進行驗證過期時間。保證抽取檢查的過程足夠快

為什么這對定期刪除的時間有明確的要求呢?

  • 因為 Redis 是單線程程序,主要的任務是處理每個命令的任務(剛才掃描過期 key…)
  • 如果掃描過期 key 消耗的時間太多了,就可能導致正常處理請求命令就被阻塞了(產生了類似 key * 的效果)

雖然有了上述兩種策略結合,但整體的效果仍一般。仍然有可能會有很多過期的 key 被殘留了,沒有及時刪除掉

但是 Redis 為了對上述進行補充,還提供了一系列的內存淘汰策略

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71740.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統架構設計師—系統架構設計篇—特定領域軟件體系結構

文章目錄 概述領域分類垂直域水平域 系統模型基本活動參與角色 概述 特定領域軟件架構(Domain Specific Software Architecture,DSSA)是在一個特定應用領域中,為一組應用提供組織結構參考的標準團建體系結構。 領域分類 垂直域…

OpenManus:優點突出,短板也明顯

最近,OpenManus 在 AI 領域掀起了一陣熱潮。作為開源版的智能代理軟件,它自誕生起就備受矚目。今天,咱們就來深入聊聊 OpenManus 在實際測試中的表現,看看它到底有哪些過人之處,又存在哪些不足。? 優點大起底? 開源…

VUE3項目的文檔結構分析

1. Vue 3 項目的文檔結構 Vue 3 項目通常基于 Vue CLI 或 Vite 等工具創建,其文檔結構如下: 常見目錄結構 my-vue-project/ ├── public/ # 靜態資源目錄 │ ├── index.html # 入口頁面 ├── src/ …

P8662 [藍橋杯 2018 省 AB] 全球變暖--DFS

P8662 [藍橋杯 2018 省 AB] 全球變暖--dfs 題目 解析講下DFS代碼 題目 解析 這道題的思路就是遍歷所有島嶼,判斷每一塊陸地是否會沉沒。對于這種圖的遍歷,我們首先應該想到DFS。 代碼的注意思想就是,在主函數中遍歷找出所有島嶼&#xff0c…

mmseg

系列文章目錄 文章目錄 系列文章目錄bug bug File "/public/home/rsinfo/project/mmsegmentation/mmseg/__init__.py", line 61, in <module>assert (mmcv_min_version < mmcv_version < mmcv_max_version), \ AssertionError: MMCV2.2.0 is used but i…

AI多模態教程:DeepSeek多模態模型解析及實踐指南

AIGCmagic社區知識星球是國內首個以AIGC全棧技術與商業變現為主線的學習交流平臺&#xff0c;涉及AI繪畫、AI視頻、大模型、AI多模態、數字人以及全行業AIGC賦能等100應用方向。星球內部包含海量學習資源、專業問答、前沿資訊、內推招聘、AI課程、AIGC模型、AIGC數據集和源碼等…

【銀河麒麟高級服務器操作系統實例】虛擬機橋接網絡問題分析及處理

更多銀河麒麟操作系統產品及技術討論&#xff0c;歡迎加入銀河麒麟操作系統官方論壇 https://forum.kylinos.cn 了解更多銀河麒麟操作系統全新產品&#xff0c;請點擊訪問 麒麟軟件產品專區&#xff1a;https://product.kylinos.cn 開發者專區&#xff1a;https://developer…

使用騰訊ncnn加速推理yolo v9對比opencv dnn

前面博客 【opencv dnn模塊 示例(25) 目標檢測 object_detection 之 yolov9 介】 紹了 yolov9 詳細使用方式&#xff0c;重參數化、導出端到端模型&#xff0c;使用 torch、opencv、tensorrt 以及 paddle 的測試。 由于存在移動端推理部署的需求&#xff0c;需要進行加速處理&…

前端小食堂 | Day10 - 前端路由の時空裂隙

??? 今日穿梭指南:兩種維度の路由宇宙 1. Hash 模式:錨點の量子隧道 // 手動創建路由監聽器 window.addEventListener(hashchange, () => {const path = location.hash.slice(1) || /; console.log(進入哈希宇宙:, path); renderComponent(path); }); // 編程…

C語言學習筆記-進階(7)字符串函數3

1. strstr的使用和模擬實現 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. &#xff08;函數返回字符串str2在字符串str1中第?次出現的位置&#x…

HarmonyOS Next 屬性動畫和轉場動畫

HarmonyOS Next 屬性動畫和轉場動畫 在鴻蒙應用開發中&#xff0c;動畫是提升用戶體驗的關鍵要素。通過巧妙運用動畫&#xff0c;我們能讓應用界面更加生動、交互更加流暢&#xff0c;從而吸引用戶的注意力并增強其使用粘性。鴻蒙系統為開發者提供了豐富且強大的動畫開發能力&…

PHP:phpstudy無法啟動MySQL服務問題解決

文章目錄 一、問題說明二、解決問題 一、問題說明 我的Windows10系統&#xff0c;之前安裝過MySQL5.7的版本。 然后&#xff0c;用phpstudy安裝MySQL8&#xff0c;并啟動MySQL8。 發生無法啟動的情況。 二、解決問題 1、刪除本地MySQL7的服務 net stop MySQL //這里的服務名…

Nginx(基礎安裝+配置文件)

目錄 一.Nginx基礎 1.基礎知識點 2.異步非阻塞機制 二.Nginx安裝 2.1安裝nginx3種方式 1.包管理工具安裝&#xff08;yum/apt&#xff09; 2.本地包安裝&#xff08;rpm/dpkg&#xff09; 3.源碼編譯安裝 3.1 源碼編譯安裝nginx流程&#xff08;ubuntu&#xff09; 1.…

C++ Windows下屏幕截圖

屏幕截圖核心代碼&#xff08;如果要求高幀率&#xff0c;請使用DxGI&#xff09;&#xff1a; // RGB到YUV的轉換公式 #define RGB_TO_Y(r, g, b) ((int)((0.299 * (r)) (0.587 * (g)) (0.114 * (b)))) #define RGB_TO_U(r, g, b) ((int)((-0.169 * (r)) - (0.331 * (g)) …

修改jupyter notebook的工作空間

今天&#xff0c;我之前R配置jupyter工作空間&#xff0c;講了各種語言內核分配不同的工作空間&#xff0c;雖然是方便管理&#xff0c;但有個問題就是需要每次都進入C盤的配置文件找到notebook的工作空間設置路徑打開修改嘛。 因此&#xff0c;今天我編寫了一個python腳本&am…

江科大51單片機筆記【9】DS1302時鐘可調時鐘(下)

在寫代碼前&#xff0c;記得把上一節的跳線帽給插回去&#xff0c;不然LCD無法顯示 一.DS1302時鐘 1.編寫DS1302.c文件 &#xff08;1&#xff09;重新對端口定義名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;&#xff08;2&#xff09;初始化 因為…

電商行業門店管理軟件架構設計與數據可視化實踐

一、行業痛點與核心訴求 在電商多平臺運營成為主流的背景下,企業普遍面臨三大管理難題: ?數據碎片化:某頭部服飾品牌2023年運營報告顯示,其分布在8個平臺的162家門店,日均產生23萬條訂單數據,但財務部門需要5個工作日才能完成跨平臺利潤核算。?成本核算失真:行業調研…

創新算法!BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測

創新算法&#xff01;BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測 目錄 創新算法&#xff01;BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測預測效果基本介紹BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測一、引言1.1、研究背景和意義1.2、…

leetcode 95.不同的二叉搜索樹 Ⅱ

首先分析一下什么是二叉搜索樹。因為我本科學習數據結構的時候就是單純背了一下題庫&#xff0c;考試非常簡單。現在額外補充學一些之前自己沒有學過的內容。有序向量可以二分查找&#xff0c;列表可以快速插入和刪除。二叉搜索樹可以實現按照關鍵碼訪問。call by key .數據表現…

數據安全防線:備份文件的重要性與自動化實踐

在數字化時代&#xff0c;信息已成為企業運營和個人生活的核心資源。無論是企業的核心數據、客戶的敏感信息&#xff0c;還是個人的珍貴照片、重要文檔&#xff0c;這些數據一旦丟失或受損&#xff0c;都可能帶來不可估量的損失。因此&#xff0c;備份文件的重要性不言而喻&…