redis 基本命令-17 (KEYS、EXISTS、TYPE、TTL)

Redis 基本命令:KEYS、EXISTS、TYPE、TTL

Redis 提供了一套基本命令,這些命令對于管理密鑰和了解數據庫中存儲的數據至關重要。這些命令雖然簡單,但提供了對 Redis 實例的結構和狀態的重要見解。具體來說,KEYS、``EXISTS、``TYPE?和?TTL?允許您檢查、驗證和管理數據的生命周期。掌握這些命令是高效使用 Redis 的基礎,并為更高級的作奠定了基礎。

了解 KEYS 命令

KEYS?命令用于檢索與指定模式匹配的鍵。雖然功能強大,但了解其含義至關重要,尤其是在生產環境中。

語法和用法

KEYS?命令的語法很簡單:

KEYS pattern

pattern?參數是 glob 樣式的模式。以下是一些常見模式:

  • *:匹配所有內容。
  • h?llo:匹配?hellohallo?和?hxllo
  • h*llo:匹配?hlloheellohillo?和?heeeello
  • h[ae]llo:匹配?hello?和?hallo,但不匹配?hillo
  • h[^e]llo:匹配?hallohbllo、…,但不匹配?hello
  • h[a-b]llo:匹配?hallo?和?hbllo

例:

假設您的 Redis 數據庫中有以下鍵:user:1000user:1001user:1002product:1product:2?和?session:123

  • KEYS user:*?將返回?user:1000user:1001?和?user:1002
  • KEYS product:*?將返回?product:1?和?product:2
  • KEYS *:*?將返回上面列出的所有鍵。
  • KEYS user:100??將返回?user:1000user:1001?和?user:1002

性能注意事項

KEYS?命令掃描整個密鑰空間,這在大型數據庫上可能非常慢。這可能會阻止其他作并降低性能。?避免在生產環境中使用?KEYS

選擇:

  • SCAN:?使用?SCAN?命令,該命令提供了一種迭代方式來檢索密鑰。它返回一個游標,您可以使用該游標批量檢索鍵,從而最大限度地減少對性能的影響。我們將在后面的模塊中介紹?SCAN
  • 集:?維護一個包含特定類型的所有鍵的單獨集。當您需要檢索這些鍵時,只需檢索集的成員即可。
  • 鍵命名約定:?使用一致的鍵命名約定,以便更輕松地以編程方式識別和檢索鍵,而無需依賴模式匹配。

使用 SCAN 的示例(簡要介紹 - 后面的模塊中將詳細介紹):

您將迭代使用?SCAN,而不是?KEYS *

SCAN 0 MATCH * COUNT 10

此命令返回一個光標和一個鍵列表。然后,您將在下一個?SCAN?命令中使用返回的光標,直到光標為?0,這表示您已經迭代了整個鍵空間。

實踐練習

  1. 將以下鍵添加到您的 Redis 數據庫:user:1user:2product:1order:1
  2. 使用?KEYS?命令檢索以?user:?開頭的所有密鑰。
  3. 使用?KEYS?命令檢索包含數字?1?的所有鍵。
  4. 考慮如果您有數百萬個鍵的潛在性能影響。

了解 EXISTS 命令

EXISTS?命令檢查 Redis 數據庫中是否存在鍵。如果鍵存在,則返回?1,如果鍵不存在,則返回?0

語法和用法

EXISTS key [key ...]

您可以在單個命令中檢查是否存在多個鍵。

例:

SET mykey "Hello"
EXISTS mykey  // Returns 1
EXISTS nonexistingkey // Returns 0
EXISTS mykey nonexistingkey // Returns 1 (because at least one key exists)

實際應用

  • 條件操作:?在對密鑰執行作之前,使用?EXISTS?檢查密鑰是否存在。例如,您可能希望僅在用戶配置文件已存在時才更新該配置文件。
  • 數據驗證:?在嘗試檢索鍵的值之前,請使用?EXISTS?驗證鍵是否存在。這可以防止錯誤并提高應用程序的穩健性。
  • 緩存:?使用?EXISTS?檢查值是否已緩存,然后再從速度較慢的數據源中檢索該值。

示例:條件更新

if (redis.exists("user:123")) {// User exists, update their profileredis.hset("user:123", "name", "New Name");
} else {// User does not exist, create a new profileredis.hset("user:123", "name", "New User");
}

實踐練習

  1. 設置名為?mykey?的鍵,其值為?myvalue
  2. 使用?EXISTS?命令檢查?mykey?是否存在。
  3. 使用?EXISTS?命令檢查是否存在名為?nonexistentkey?的鍵。
  4. 使用?EXISTS?命令檢查?mykey?和?nonexistentkey?是否都存在。

了解 TYPE 命令

TYPE?命令返回存儲在給定鍵中的數據類型。Redis 支持多種數據類型,包括:

  • string
  • list
  • set
  • zset(排序集)
  • hash
  • stream

如果密鑰不存在,則命令返回?none

語法和用法

TYPE key

例:

SET mykey "Hello"
TYPE mykey // Returns "string"LPUSH mylist "World"
TYPE mylist // Returns "list"SADD myset "Element"
TYPE myset // Returns "set"HSET myhash field value
TYPE myhash // Returns "hash"ZADD myzset 1.0 element
TYPE myzset // Returns "zset"TYPE nonexistingkey // Returns "none"

實際應用

  • 數據驗證:?使用?TYPE?確保鍵在對鍵執行作之前包含預期的數據類型。這可以防止錯誤并確保數據完整性。
  • 調試:?使用?TYPE?在調試 Redis 應用程序的問題時檢查鍵的數據類型。
  • 多態運算:?在某些情況下,您可能希望根據鍵的數據類型執行不同的作。?使用 TYPE?命令可以實現這種多態行為。

示例:數據驗證

if (redis.type("mykey") == "string") {// Key is a string, perform string-specific operationsString value = redis.get("mykey");System.out.println("Value: " + value);
} else {// Key is not a string, handle the errorSystem.out.println("Error: Key is not a string");
}

實踐練習

  1. 設置一個名為?mykey?的鍵,字符串值為?myvalue
  2. 創建一個名為?mylist?的列表,其中包含元素?item1?和?item2
  3. 創建一個名為?myhash?的哈希,其中包含字段?field1?和?field2?以及相應的值?value1?和?value2
  4. 使用?TYPE?命令確定?mykeymylistmyhash?和不存在的密鑰的數據類型。

了解 TTL 命令

TTL?(Time To Live) 命令返回具有關聯到期時間的密鑰的剩余生存時間 (以秒為單位)。

語法和用法

TTL key

返回值:

  • 正整數:?剩余生存時間(以秒為單位)。
  • -1:?密鑰存在,但沒有關聯的過期時間。
  • -阿拉伯數字:?密鑰不存在。

例:

SET mykey "Hello" EX 10  // Set key with 10-second expiration
TTL mykey // Returns a value between 0 and 10 (depending on how much time has passed)TTL nonexistingkey // Returns -2SET anotherkey "World"
TTL anotherkey // Returns -1

實際應用

  • 緩存管理:?使用?TTL?監控緩存數據的過期時間,并根據需要刷新緩存。
  • 會話管理:?使用?TTL?跟蹤用戶會話的過期時間,并在用戶處于非活動狀態一段時間后自動注銷。
  • 速率限制:?將?TTL?與其他命令結合使用以實現速率限制機制。

示例:緩存刷新

if (redis.ttl("cached_data") < 60) {// Cache is about to expire, refresh itString data = retrieveDataFromDatabase();redis.setex("cached_data", 3600, data); // Set with 1-hour expiration
}

修改過期時間

  • EXPIRE 密鑰秒:?將 key 的過期時間設置為指定的秒數。
  • PEXPIRE 密鑰毫秒:?將 key 的過期時間設置為指定的毫秒數。
  • PERSIST 鍵:?刪除密鑰的過期時間,使其持久化。

例:

SET mykey "Hello"
EXPIRE mykey 60 // Set expiration to 60 seconds
TTL mykey // Returns a value between 0 and 60PERSIST mykey
TTL mykey // Returns -1

實踐練習

  1. 設置一個名為?mykey?的鍵,其值為?myvalue,有效期為 30 秒。
  2. 使用?TTL?命令檢查?mykey?的剩余生存時間。
  3. 使用?EXPIRE?命令將?mykey?的過期時間再延長 60 秒。
  4. 使用?PERSIST?命令從?mykey?中刪除過期時間。
  5. 驗證?TTL?命令現在是否為?mykey?返回 -1。

這些基本命令是與 Redis 交互的基本構建塊。了解如何有效地使用它們將使您能夠更有效地管理數據并構建強大的應用程序。

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

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

相關文章

加速leveldb查詢性能之Cache技術

加速leveldb查詢性能之Cache技術 目錄 1.兩種Cache2.Table Cache3.Block Cache 注&#xff1a;本節所有內容更新至星球。 學習本節之前最好提前需要學習前面兩篇文章&#xff0c;這樣便好理解本節內容。 多圖文講解leveldb之SST/LDB文件格式 【深入淺出leveldb】LRU與哈希表 1.…

5.2.3 使用配置文件方式整合MyBatis

本實戰通過使用Spring Boot和MyBatis技術棧&#xff0c;實現了文章列表顯示功能。首先&#xff0c;通過創建ArticleMapper接口和對應的ArticleMapper.xml配置文件&#xff0c;實現了對文章數據的增刪改查操作&#xff0c;并通過單元測試驗證了功能的正確性。接著&#xff0c;通…

Node.js 源碼架構詳解

Node.js 的源碼是一個龐大且復雜的項目&#xff0c;它主要由 C 和 JavaScript 構成。要完全理解每一部分需要大量的時間和精力。我會給你一個高層次的概述&#xff0c;并指出一些關鍵的目錄和組件&#xff0c;幫助你開始探索。 Node.js 的核心架構 Node.js 的核心可以概括為以…

【NLP 76、Faiss 向量數據庫】

壓抑與痛苦&#xff0c;那些輾轉反側的夜&#xff0c;終會讓我們更加強大 —— 25.5.20 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由 Facebook AI 團隊開發的一個開源庫&#xff0c;用于高效相似性搜索的庫&#xff0c;特別適用于大規模向…

Go 語言簡介

1. Go 語言簡介 1.1 什么是 Go 語言 Go語言&#xff0c;通常被稱為Golang&#xff0c;是由Google在2007年開始開發&#xff0c;并在2009年正式發布的一種開源編程語言。Go語言的設計初衷是解決大型軟件開發中的效率和可維護性問題&#xff0c;特別是在多核處理器和網絡化系統…

VMware虛擬機突然無法ssh連接

遇到的情況&#xff1a; 功能全部正常的情況下&#xff0c;沒有修改任何配置&#xff0c;重啟電腦之后無法ssh連接 其實不太可能的可能原因&#xff1a; 1、虛擬機內部sshd服務未運行 systemctl status sshd systemctl start sshd 2、檢查SSH端口監聽 netstat -an | grep :…

[ 計算機網絡 ] | 宏觀談談計算機網絡

&#xff08;目錄占位&#xff09; 網絡間通信&#xff0c;本質是不同的兩個用戶通信&#xff1b;本質是兩個不同主機上的兩個進程間通信。 因為物理距離的提升&#xff0c;就衍生出了很多問題。TCP/IP協議棧 / OSI七層模型&#xff0c;將協議分層&#xff0c;每一層都是為了…

Oracle 11g導出數據庫結構和數據

第一種方法&#xff1a;Plsql 利用plsql可視化工具導出&#xff0c;首先根據步驟導出表結構&#xff1a; 工具(Tools)->導出用戶對象(export user objects)。 其次導出數據表結構&#xff1a; 工具(Tools)->導出表(export Tables)->選中表->sql inserts(where語…

跟Gemini學做PPT:匯報背景圖尋找指南

PPT 匯報背景圖尋找指南 既然前端功能已經完善&#xff0c;現在可以專注于匯報了。對于 PPT 背景圖&#xff0c;你有幾個選擇&#xff1a; 1. 內置模板和主題&#xff1a; 優點&#xff1a; 最簡單、快速&#xff0c;PowerPoint、Keynote、Google Slides 等演示軟件都內置了…

【Hadoop】大數據技術之 HDFS

目錄 一、HDFS 概述 1.1 HDFS 產出背景及定義 1.2 HDFS 優缺點 1.3 HDFS 組成架構 1.4 HDFS 文件塊大小 二、HDFS 的Shell 操作 三、HDFS 的讀寫流程&#xff08;面試重點&#xff09; 3.1 HDFS 寫數據流程 3.2 HDFS 讀數據流程 四、DataNode 4.1 DataNode 的工作機制…

Spring Boot WebFlux流式返回全攻略:從基礎到企業級實踐

目錄 流式返回的核心價值與適用場景WebFlux核心機制解析基礎流式接口開發實戰企業級應用場景與優化方案客戶端對接全方案常見問題與調優策略未來發展趨勢1. 流式返回的核心價值與適用場景 1.1 傳統響應模式的局限性 傳統Spring MVC采用同步阻塞模型,在以下場景面臨挑戰: 大…

AI浪潮下,第五消費時代的商業進化密碼

解鎖 AI 與第五消費時代 在時代的長河中,消費浪潮的更迭深刻地影響著商業的格局。當下,我們正處于第五消費時代,這個時代有著鮮明的特征,如老齡化、單身化趨勢日益顯著,社會逐漸步入低欲望、個性化與共享化并行的階段 。隨著人工智能技術的飛速發展,它在商業領域的滲透也…

氫氣傳感器維護常見問題及解決方法

氫氣傳感器在工業生產和氫能源系統中扮演著關鍵角色&#xff0c;用于實時檢測氫氣濃度以預防爆炸和中毒事故。然而&#xff0c;傳感器的維護過程中可能會遇到一些常見問題&#xff0c;這些問題可能會影響傳感器的性能和檢測準確性。本文將詳細探討這些常見問題及其解決方法。 1…

【普及+/提高】洛谷P2613 ——【模板】有理數取余

見&#xff1a;P2613 【模板】有理數取余 - 洛谷 題目描述 給出一個有理數 cba?&#xff0c;求 cmod19260817 的值。 這個值被定義為 bx≡a(mod19260817) 的解。 輸入格式 一共兩行。 第一行&#xff0c;一個整數 a。 第二行&#xff0c;一個整數 b。 輸出格式 一個整…

RK常見系統屬性設置/獲取命令使用

設置有線mac地址 ifconfig eth0 hw ether 021234567000 讀取mac地址 public static String getEthMacAddressBySysFs() { try (BufferedReader reader new BufferedReader(new FileReader("/sys/class/net/eth0/address"))) { return reader.r…

文章記單詞 | 第115篇(六級)

一&#xff0c;單詞釋義 solar /?so?l?r/ adj. 太陽的&#xff1b;太陽能的bruise /bru?z/ n. 瘀傷&#xff1b;擦傷 v. &#xff08;使&#xff09;青腫&#xff1b;挫傷thus /?s/ adv. 因此&#xff1b;這樣&#xff1b;于是drink /dr??k/ v. 喝&#xff1b;飲 n. 飲…

9大開源AI智能體概況

項目GitHub 鏈接開發組織核心功能應用領域典型應用案例活躍度AutoGPT (176k?)鏈接Significant Gravitas 團隊基于 GPT-4 的自主代理&#xff0c;能夠自動分解任務并生成多步提示循環執行&#xff0c;支持調用工具&#xff08;如網絡搜索、文件操作等&#xff09;。自動化辦公、…

SpringBoot3整合WebSocket

一、WebSocket簡介 WebSocket協議是基于TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信&#xff0c;允許服務器主動向客戶端推送數據。 與傳統的 HTTP 請求-響應模式不同&#xff0c;WebSocket 在建立連接后&#xff0c;允許服務器和客戶端之間進行雙向…

FTP Bounce Attack:原理、影響與防御

一、引言 FTP&#xff08;文件傳輸協議&#xff09;是一種用于在網絡上進行文件傳輸的協議&#xff0c;廣泛應用于各種網絡環境中。然而&#xff0c;FTP協議的安全性問題一直備受關注&#xff0c;其中FTP Bounce Attack&#xff08;FTP跳轉攻擊&#xff09;是一種具有代表性的…

文獻閱讀——NeuroBayesSLAM

原文地址 1.核心理論&#xff1a;貝葉斯多感官整合框架 目標&#xff1a;結合視覺線索 c v i c_{vi} cvi?和前庭線索 c v e c_{ve} cve?來估計頭部方向或位置 θ 貝葉斯公式 p ( θ ∣ c v i , c v e ) ∝ p ( c v i ∣ θ ) p ( c v e ∣ θ ) p ( θ ) p(\theta | c_{vi…