[Redis]基本全局命令

Redis存儲方式介紹

在 Redis 中數據是以鍵值對的凡事存儲的,鍵(Key)和值(Value)是基本的數據存儲單元。以下是對 Redis 鍵值對的詳細講解:

鍵(Key):

類型:鍵是字符串類型,可以包含任何二進制數據。

長度限制:鍵的最大長度為 512 MB。

命名規范:雖然 Redis 對鍵的命名沒有嚴格的要求,但為了提高可讀性和管理性,通常使用有意義的命名規范。例如:?session:abc123

值(Value):

值可以是多種數據類型之一,Redis 提供了豐富的數據結構來存儲不同類型的數據:

比如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set,ZSet)、位圖(Bitmap)、HyperLogLog、地理空間索引(Geospatial)、流(Stream)

這里以字符串類型舉例,其他數據類型后面會介紹

基礎全局命令介紹

設置和獲取鍵值對(string)

這里操作就是這是一個key1?value1的鍵值對,key1為鍵,value1為值

設置好后,再用get命令獲取到key1對應的值

獲取到value1

檢查鍵是否存在

exists key



因為有key1,所以使用key1可以查詢到,返回了1

(這里也可以一次性查詢多個key,返回就是有幾個查到了,就返回幾)

沒有key2,查詢不到,返回0

查找鍵

keys [pattern]

返回所有滿足樣式(pattern)的 key。支持如下統配樣式。

h?llo 匹配 hello , hallo 和 hxllo

h*llo 匹配 hllo 和 heeeello

h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo

h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello

h[a-b]llo 匹配 hallo 和 hbllo

?keys *?返回數據庫中所有key

使用 keys?命令在 Redis 中有很大的風險,特別是在生產環境中。這是因為 keys?命令會掃描整個數據庫并返回匹配指定模式的所有鍵。這種操作可能會對 Redis 服務器的性能產生嚴重影響,特別是在鍵數量較多的情況下。

keys命令的風險
  1. 性能問題

    • KEYS 命令是阻塞操作,會遍歷整個數據庫來查找匹配的鍵。
    • 在鍵數量較多時,執行 KEYS 命令可能會導致 Redis 服務卡頓,影響其他操作的響應時間。
    • 這種操作的時間復雜度為 O(N),其中 N 是數據庫中的鍵數量。
  2. 阻塞客戶端

    • 如果一個客戶端執行 KEYS 命令,其他客戶端的請求可能會被阻塞,直到 KEYS 命令執行完畢。
    • 在高并發場景下,這種阻塞可能導致大量請求堆積,造成 Redis 服務不可用。
  3. 內存消耗

    • KEYS 命令返回的結果集可能非常大,導致返回的數據量超出客戶端的處理能力。
    • 結果集需要在內存中存儲,可能導致 Redis 服務器的內存壓力增大。

當然,也有其他命令可以代替keys,比如scan命令,后面會講到。

在數據量很小的情況下,使用keys命令問題不大。

?刪除鍵

del key

這里因為存在key1,所以使用del刪除返回1,表示刪除成功1個

但是key2不存在,沒有刪除任何key,返回0

設置過期時間

expire key seconds? ? ? ? (單位是秒)

pexpire?key?millisecond? ? ? ? (單位是毫秒)

設置key1,然后設置key1的過期時間為10秒

10秒后用exists查詢,返回0,說明key1已經過期被刪除了

查詢鍵的剩余生存時間

TTL:獲取鍵的剩余生存時間(單位是秒)

PTTL:獲取鍵的剩余生存時間(單位是毫秒)

設置鍵值對并設置過期時間

用ttl和pttl查詢剩余過期時間

過期后,key1被刪除,返回-2

如果返回-1,說明key是永久存在的,沒有設置過期時間

redis過期策略

Redis 通過多種策略來管理鍵的過期和內存回收

可以在redis系統文件的配置,也就是redis.conf里修改過期策略

1. 惰性刪除(Lazy Deletion)

惰性刪除策略意味著當客戶端訪問某個鍵時,Redis 會檢查該鍵是否已經過期。如果該鍵已經過期,Redis 將立即刪除它,并返回一個不存在的結果。

  • 實現方式
    • 每次讀取或寫入一個鍵時,Redis 都會檢查該鍵的過期時間。
    • 如果過期時間已到,Redis 會刪除該鍵,然后返回不存在的結果或進行相應的寫操作。
  • 優點
    • 不會額外占用 CPU 資源,因為只在訪問鍵時進行檢查。
  • 缺點
    • 過期鍵在沒有被訪問時仍會占用內存。

2. 定期刪除(Periodic Deletion)

定期刪除策略是指 Redis 以固定的時間間隔對帶有過期時間的鍵進行掃描和刪除。

  • 實現方式
    • Redis 內部會運行一個后臺任務,以每秒 10 次的頻率隨機抽取一部分帶有過期時間的鍵進行檢查。
    • 如果發現這些鍵已經過期,Redis 會刪除它們。
  • 優點
    • 相對平衡了性能和內存回收的需求。
    • 可以在一定程度上避免大量過期鍵長時間占用內存。
  • 缺點
    • 由于是定期抽樣檢查,仍有可能存在一些過期鍵在被檢查到之前長時間占用內存。

Redis 過期鍵處理策略(惰性刪除和定期刪除)是內置的,不需要特別配置。

但是可以通過以下配置調整定期刪除的頻率:(在redis.conf配置文件里)

hz 10
這表示 Redis 的事件循環頻率,每秒執行 10 次事件循環。這個值會影響定期刪除過期鍵的頻率。

3. 主動刪除(Active Deletion)

主動刪除策略主要是通過內存淘汰策略(Eviction Policy)來實現,當 Redis 內存達到配置的最大使用量時,會主動刪除一些鍵來釋放內存。

  • 配置方式

    • 可以通過 maxmemory 配置項設置 Redis 的最大內存使用量。
    • 可以通過 maxmemory-policy 配置項設置內存淘汰策略,包括以下幾種:
      • volatile-lru:從設置了過期時間的鍵中移除最近最少使用的鍵。
      • allkeys-lru:從所有鍵中移除最近最少使用的鍵。
      • volatile-lfu:從設置了過期時間的鍵中移除最不常使用的鍵。
      • allkeys-lfu:從所有鍵中移除最不常使用的鍵。
      • volatile-ttl:從設置了過期時間的鍵中移除將要過期的鍵。
      • noeviction:當內存達到限制時,不再進行刪除操作,直接返回錯誤。
      • volatile-random:從設置了過期時間的鍵中隨機移除鍵。
      • allkeys-random:從所有鍵中隨機移除鍵。
  • 優點

    • 可以確保 Redis 在達到內存上限時繼續運行。
    • 根據不同的策略,可以優化特定場景下的性能和內存使用。
  • 缺點

    • 可能導致一些熱鍵(高頻訪問的鍵)被移除,從而影響性能。

4. 內存淘汰策略

當 Redis 內存使用達到限制時,會根據配置的內存淘汰策略刪除一些鍵,以釋放內存。以下是一些常用的內存淘汰策略:

  • LRU(Least Recently Used):刪除最近最少使用的鍵。
  • LFU(Least Frequently Used):刪除使用頻率最少的鍵。
  • TTL(Time to Live):刪除最早過期的鍵。
  • 隨機刪除:隨機刪除一些鍵。

可以通過 maxmemory-policy 配置項來設置具體的淘汰策略。

比如:

maxmemory-policy allkeys-lru

這表示當達到最大內存限制時,Redis 將采用 LRU策略在所有鍵中移除最近最少使用的鍵。

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

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

相關文章

JVM、JRE和JDK的區別

首先需要確定的是JDK里是包含JRE的,而JRE里又包含JVM,它們區別在于面向的服務對象不同所以進行了不同的包裝。 JVM:JVM是面向操作系統,.Class字節碼->機器碼以及程序運行的內存的管理。 JRE:JRE是面向于程序的&am…

全局配置路徑無法識別的解決——后端

在全局配置路徑reggie.path的時候,無法正常啟動SpringBoot項目 Value("${reggie.path}")private String basePath; 查看application.yml的配置情況: 發現path沒有起作用,推測是格式問題,冒號后面空格后即可

Web API——獲取DOM元素

目錄 1、根據選擇器來獲取DOM元素 2.、根據選擇器來獲取DOM元素偽數組 3、根據id獲取一個元素 4、通過標簽類型名獲取所有該標簽的元素 5、通過類名獲取元素 目標:能查找/獲取DOM對象 1、根據選擇器來獲取DOM元素 語法: document.querySelector(css選擇…

關于性能問題優化的小討論

大家好,我是阿趙。 ??最近很流行把之前制作在安卓或者iOS端的游戲轉成微信小程序上架,我所在的項目也有這樣的操作。微信小程序是用WebGL來運行的,實際上它的性能很差,只有不到app端的三分之一的性能可用,內存方面也…

LabVIEW機器視覺技術對工業制造有什么影響?

LabVIEW機器視覺技術對工業制造產生了深遠的影響,主要體現在以下幾個方面: 1. 提高生產效率 LabVIEW機器視覺技術可以自動檢測和分析生產線上的產品,提高檢測速度和精度。傳統的人工檢測方式往往效率低下且容易出錯,而機器視覺系…

java 數組的常見操作

在 Java 中,數組是一種特殊的對象,用于存儲相同類型的多個元素。以下是一些常見的數組操作: 聲明數組:使用以下語法聲明一個數組,其中 type 是數組元素的數據類型,name 是數組的名稱。 type[] name;例如&…

第19講:自定義類型:結構體

目錄 1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 特殊的結構聲明1.3 結構的?引? 2. 結構體內存的對齊2.2 為什么存在內存對??2.3 修改默認對?數 3. 結構體傳參4. 結構體實現位段4.1 什么是位段4.2 位段的內存分配4.3 位段的跨平臺問題4.5 位段使?的注意事項 正文…

梳理 JavaScript 中空數組調用 every方法返回true 帶來驚訝的問題

前言 人生總是在意外之中. 情況大概是這樣的. 前兩天版本上線以后, 無意中發現了一個bug, 雖然不是很大, 為了不讓用戶使用時感覺到問題. 還是對著一個小小的bug進行了修復, 并重新在上線一次, 雖然問題不大, 但帶來的時間成本還是存在的. 以及上線后用戶體驗并不是很好. 問題…

JVM學習-垃圾收集器(二)

Serial回收器:串行回收 Serial收集器是最基本、歷史最悠久的收集器JDK1.3之前新生代唯一的選擇Hotpot中Client模式下的默認新生代垃圾收集器采用復制算法,串行回收“Stop-the-world”機制的方式執行內存回收除了年輕代之外,Serial收集器還提…

TG-5006CG溫補晶振在WiFi6無線路由器模塊的應用

WiFi6無線路由器是采用了wiFi6技術的無線網絡設備,旨在為家庭、辦公室或其他場所提供高速、穩定的無線網絡連接。它不僅能實現更高的數據傳輸速率和更低的延遲,還提供了更先進的加密和安全措施,確保用戶數據安全。為了支持這些高級功能&#…

深入 Rust 標準庫,Rust標準庫源代碼系統分析

系列文章目錄 送書第一期 《用戶畫像:平臺構建與業務實踐》 送書活動之抽獎工具的打造 《獲取博客評論用戶抽取幸運中獎者》 送書第二期 《Spring Cloud Alibaba核心技術與實戰案例》 送書第三期 《深入淺出Java虛擬機》 送書第四期 《AI時代項目經理成長之道》 …

Elasticsearch集群部署以及認證配置

文檔地址: 官網文檔地址: https://www.elastic.co/guide/index.html rpm包/源碼下載地址:https://www.elastic.co/cn/downloads 源碼安裝-環境準備: node-01 192.168.95.174 node-02 192.168.95.173 node-03 …

關于Mysql基本概念的理解

系列文章 關于時間復雜度o(1), o(n), o(logn), o(nlogn)的理解 關于HashMap的哈希碰撞、拉鏈法和key的哈希函數設計 關于JVM內存模型和堆內存模型的理解 關于代理模式的理解 關于Mysql基本概念的理解 關于軟件設計模式的理解 文章目錄 前言一、事務隔離級別二、存儲引擎1.…

【Python爬蟲】案例_斗魚

聲明:案例只用于學習,不得惡意使用 要求:獲取直播間標題、類型、主播、熱度,并實現翻頁 定位隨著網站更新可能不會實現,請自行更改 from selenium import webdriver from selenium.webdriver.chrome.options import…

【uniapp】CSS實現多行文本展開收起的文字環繞效果

1. 效果圖 收起狀態 展開狀態 2. 代碼實現 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

【網絡安全】Linux 應急響應-溯源-系統日志排查知識點

Linux 應急響應-溯源-系統日志排查知識點匯總 1. 查看當前已經登錄到系統的用戶 (w 命令) w2. 查看所有用戶最近一次登錄 (lastlog 命令) lastlog lastlog | grep -v "Never logged in"3. 查看歷史登錄用戶以及登錄失敗的用戶 (last 和 lastb 命令) last lastb4. …

使用docker完整搭建前后端分離項目

1、docker的優勢&#xff0c;為啥用docker 2、docker的核心概念 鏡像【Image】- 只讀模板 容器【Container】- 運行鏡像的一個外殼&#xff0c;相當于一個獨立的虛擬機 倉庫【repository】- 鏡像的管理工具&#xff0c;可公開&#xff0c;可私有&#xff1b;類似git倉庫 3、c…

【前端】js通過元素屬性獲取元素

【前端】js通過元素屬性獲取元素 <div for"hc_opportunity_config">aaaaa</div>//通過屬性獲取元素document.querySelector([for"hc_opportunity_config"]) document.querySelector([屬性"屬性值"])

操作教程|通過DataEase開源BI工具對接金山多維表格

前言 金山多維表格是企業數據處理分析經常會用到的一款數據表格工具&#xff0c;它能夠將企業數據以統一的列格式整齊地匯總至其中。DataEase開源數據可視化分析工具可以與金山多維表格對接&#xff0c;方便企業更加快捷地以金山多維表格為數據源&#xff0c;制作出可以實時更…

包拯斷案 | MySQL5.7替換路上踩過的坑 一鍵get解決辦法@還故障一個真相

提問&#xff1a;作為DBA運維的你&#xff0c;是否有過這些煩惱 1、業務系統進行替換投產時&#xff0c;發現數據庫回放并行度低 2、雖然2個數據庫集群使用同一份數據&#xff0c;卻在關閉雙一后&#xff0c;二級從庫的回放效率依舊緩慢&#xff0c;不知是什么原因&#xff1f…