Redis 常見數據類型

Redis 常見數據類型


一、基本全局命令詳解與實操
1. KEYS 命令

功能:按模式匹配返回所有符合條件的鍵(生產環境慎用,可能導致阻塞)。
語法

KEYS pattern  

模式規則

  • h?llo:匹配 hello, hallo?表示單個字符)。
  • h*llo:匹配 hllo, heeeello*表示任意字符)。
  • h[ae]llo:匹配 hello, hallo[]內為可選字符)。
  • h[^e]llo:排除 h后第二個字符為 e 的鍵(如 hxllo)。

示例

127.0.0.1:6379> MSET user:1:name Alice user:2:name Bob  
OK  
127.0.0.1:6379> KEYS user:*:name  
1) "user:1:name"  
2) "user:2:name"  

警告

  • 在數據量大的數據庫中執行 KEYS * 可能導致服務卡頓,建議用 SCAN 代替。

2. EXISTS 命令

功能:檢查一個或多個鍵是否存在。
語法

EXISTS key [key ...]  

返回值:存在的鍵數量(0~N)。

示例

127.0.0.1:6379> SET key1 "value"  
OK  
127.0.0.1:6379> EXISTS key1 key2  
(integer) 1  # 只有 key1 存在  

3. DEL 命令

功能:刪除一個或多個鍵(無視數據類型)。
語法

DEL key [key ...]  

返回值:成功刪除的鍵數。

示例

127.0.0.1:6379> SET key1 "v1"  
OK  
127.0.0.1:6379> DEL key1 key2  
(integer) 1  # key2 不存在,僅刪除 key1  

4. EXPIRE / TTL 命令

功能:設置鍵的過期時間(秒) / 查看剩余存活時間。
語法

EXPIRE key seconds      # 設置過期時間  
TTL key                 # 查看剩余時間  

返回值

  • EXPIRE:1(成功),0(鍵不存在或設置失敗)。
  • TTL:剩余秒數,-1(無過期時間),-2(鍵不存在)。

示例

127.0.0.1:6379> SET session:123 "data"  
OK  
127.0.0.1:6379> EXPIRE session:123 300  # 5分鐘后過期  
(integer) 1  
127.0.0.1:6379> TTL session:123  
(integer) 297  # 剩余297秒  

擴展操作

  • PEXPIRE:以毫秒為單位設置過期時間。
  • PERSIST:移除鍵的過期時間,使其永久有效。

5. TYPE 命令

功能:返回鍵對應的數據類型。
語法

TYPE key  

返回值string, hash, list, set, zset, stream, none(鍵不存在)。

示例

127.0.0.1:6379> LPUSH mylist "a" "b"  
(integer) 2  
127.0.0.1:6379> TYPE mylist  
list  

二、數據結構與內部編碼深度解析
1. 查看內部編碼

命令OBJECT ENCODING key
示例

127.0.0.1:6379> SET num 100  
OK  
127.0.0.1:6379> OBJECT ENCODING num  
"int"          # 存儲為整數  127.0.0.1:6379> SET long_str "A very long string..."  
OK  
127.0.0.1:6379> OBJECT ENCODING long_str  
"raw"          # 存儲為普通字符串  
2. 各數據結構的內部編碼規則
數據結構默認編碼觸發條件(可配置)
stringint (整數)值可表示為64位有符號整數。
embstr (短字符串)字符串長度 ≤ 39字節(Redis 5.0+)。
raw (長字符串)字符串長度 > 39字節。
hashziplist字段數 ≤ hash-max-ziplist-entries(默認512),且字段值長度 ≤ hash-max-ziplist-value(默認64字節)。
hashtable超出上述閾值時自動轉換。
listziplist元素數 ≤ list-max-ziplist-entries(默認512),且元素值長度 ≤ list-max-ziplist-value(默認64字節)。
linkedlist超出閾值時轉換。

配置調整示例(修改 redis.conf):

hash-max-ziplist-entries 1024  # 哈希字段數超過1024時轉hashtable  
list-max-ziplist-size -2       # 列表元素大小動態調整(默認值)  

三、單線程架構原理與優化
1. 單線程模型核心機制
  • 純內存操作:數據全在內存中,無需磁盤I/O。
  • I/O多路復用
    • 使用 epoll(Linux)監聽多個客戶端連接。
    • 事件驅動模型,將連接、讀寫事件轉換為隊列任務。
  • 無鎖設計:所有命令串行執行,避免競態條件。
2. 性能瓶頸與規避方法
  • 長耗時命令
    • 避免使用 KEYS *FLUSHALL、復雜 Lua 腳本。
    • 使用 SCAN 代替 KEYS,分批次遍歷鍵。
  • 大Key問題
    • 拆分大哈希/列表(如將 user:1000:friends 拆分為多個鍵)。
    • 使用 UNLINK(異步刪除)代替 DEL
3. 監控與調優命令
  • 查看命令執行時間
    SLOWLOG GET 5  # 獲取最近5條慢查詢日志  
    
  • 內存分析
    MEMORY USAGE key  # 查看鍵的內存占用(單位字節)  
    

四、操作驗證實驗
實驗1:觀察字符串編碼變化
  1. 設置不同長度的字符串:
    127.0.0.1:6379> SET small "abc"  
    OK  
    127.0.0.1:6379> OBJECT ENCODING small  
    "embstr"  127.0.0.1:6379> SET large "This is a very long string..."  # 長度超過39字節  
    OK  
    127.0.0.1:6379> OBJECT ENCODING large  
    "raw"  
    
實驗2:哈希編碼轉換測試
  1. 創建小哈希:
    127.0.0.1:6379> HMSET user:1000 name "Alice" age 30  
    OK  
    127.0.0.1:6379> OBJECT ENCODING user:1000  
    "ziplist"  
    
  2. 添加大字段觸發轉換:
    127.0.0.1:6379> HSET user:1000 bio "A very long biography..."  # 字段值超過64字節  
    (integer) 1  
    127.0.0.1:6379> OBJECT ENCODING user:1000  
    "hashtable"  
    

總結

  • 全局命令:需注意 KEYS 的性能風險,優先使用 SCAN
  • 內部編碼:通過 OBJECT ENCODING 和配置文件優化內存與性能。
  • 單線程優化:避免長耗時操作,合理設計數據結構和命令。

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

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

相關文章

33號遠征隊 - 游玩鑒賞

風景很好畫質很好 , 圖片太大只能截圖一小部分 地編和特效 值得參考

使用JMETER中的JSON提取器實現接口關聯

一、JSON提取器介紹 JSON提取器是JMETER工具中用于從JSON響應中提取數據的重要組件,常常用于接口關聯場景中(參數傳遞)。 二、添加JSON提取器 舉例(積分支付接口請求數據依賴于創建訂單接口響應的payOrderId) 1.在…

QT6(35)4.8定時器QTimer 與QElapsedTimer:理論,例題的界面搭建,與功能的代碼實現。

(112) (113)模仿隨書老師給的源代碼搭建的, LCD 顯示的部分不一樣 : (114)以下開始代碼完善: 關聯定時器的信號與槽函數 : (115)…

nvidia-smi 和 nvcc -V 作用分別是什么?

命令1:nvidia-smi 可以查看當前顯卡的驅動版本,以及該驅動支持的CUDA版本。 命令2:nvcc -V 可以看到實際安裝的CUDA工具包版本為 12.8 更詳細的介紹,可以參考如下鏈接

Excel 數據 可視化 + 自動化!Excel 對比軟件

各位Excel小能手們!你們有沒有過要對比兩個Excel表格數據差異,卻看得眼睛都花了的經歷?其實啊,現在有專門的Excel文件比較軟件能幫咱解決這大難題。這軟件就是用來快速找出兩個或多個Excel表格數據不同之處,還能把修改…

《軟件項目經濟性論證報告模板:全面解析與策略建議》

《軟件項目經濟性論證報告模板:全面解析與策略建議》 一、引言 1.1 項目背景闡述 在數字化浪潮席卷全球的當下,各行業對軟件的依賴程度日益加深。[行業名稱] 行業也不例外,隨著業務規模的不斷擴張、業務復雜度的持續提升以及市場競爭的愈發激烈,對高效、智能、定制化軟件…

高頻工業RFID讀寫器-三格電子

高頻工業RFID讀寫器 型號:SG-HF40-485、SG-HF40-TCP 產品功能 高頻工業讀寫器(RFID)產品用在自動化生產線,自動化分揀系統,零部件組裝產線等情境下,在自動化節點的工位上部署RFID讀寫設備,通過與制品的交互&#xf…

2025年5月計劃(linux+Gpu精粹催眠+UE獨立游戲)

終于步入正軌了,4月份為了各種面試,一會學這,一會學那。 現在,有大量的業余時間了,也該干點正事了。 按照規劃, 1,ue獨立游戲(十分鐘的視頻即可) 2,linux-&…

計算機學習路線與編程語言選擇(信息差)

——授人以魚不如授人以漁 計算機學習公式:1/3科班思維 1/3路線選擇 1/3工程能力 好工作隨便找(來自B站小毛毛熊) 本文主要是路線選擇!!!下面開始吧。 面向崗位學習!到招聘網站看看有哪些…

『Python學習筆記』ubuntu解決matplotlit中文亂碼的問題!

ubuntu解決matplotlit中文亂碼的問題! 文章目錄 simhei.ttf字體下載鏈接:http://xiazaiziti.com/210356.html將字體放到合適的地方 sudo cp SimHei.ttf /usr/share/fonts/(base) zkfzkf:~$ fc-list | grep -i "SimHei" /usr/local/share/font…

電動汽車充換電設施可調能力聚合評估與預測 - 使用說明文檔

電動汽車充換電設施可調能力聚合評估與預測 - 使用說明文檔 概述 本腳本real_data_model.m基于論文《大規模電動汽車充換電設施可調能力聚合評估與預測》(鮑志遠,胡澤春)實現了電動汽車充電設施的負荷預測和可調能力評估。使用混合模型(LSTM神經網絡線…

C#生成二維碼和條形碼

C# 實現二維碼和條形碼生成:從入門到實戰 文章目錄 C# 實現二維碼和條形碼生成:從入門到實戰一、引言二、準備工作2.1 開發環境搭建2.2 引入相關庫 三、生成條形碼3.1 條形碼基本概念3.2 使用[ZXing.Net](https://ZXing.Net)生成條形碼3.2.1 核心代碼實現…

C++結構體介紹

結構體的定義 在C中,結構體(struct)是一種用戶定義的數據類型,允許將不同類型的數據組合在一起。結構體的定義使用struct關鍵字,后跟結構體名稱和一對花括號{},花括號內包含成員變量的聲明。 struct Pers…

各類音頻放大器電路原理簡析

A類(甲類)放大器 晶體管在整個信號周期內始終導通,導通角為360 本質上是一個簡單的共源放大電路,M1 是放大管,M2 為電流源管負載,其最大輸出電流受ID2控制,帶負載能力弱。 B類(乙類…

OpenCV的 ccalib 模塊用于自定義標定板的檢測和處理類cv::ccalib::CustomPattern()----函數calibrate

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::ccalib::CustomPattern 是OpenCV的 ccalib 模塊中的一個類,主要用于自定義標定板的檢測和處理。這個模塊提供了比傳統的 calib3d…

【從零開始學習RabbitMQ | 第一篇】從異步通信到交換機

目錄 前言 1.什么是RabbitMQ? 2.同步調用的優缺點 3.異步調用的優缺點 3.1優點: 3.2異步調用的問題是什么? 4技術選型 4.1AMQP協議就是: 4.2kafka和RabbitMQ的使用場景 5.安裝RabitMq 6.rabitmq的整體架構 7.RabibtM…

Dify MCP實戰 - 郵件發送

安裝MCP sse插件 配置MCP Server 由于Dify 目前還沒有支持stdio方式連接MCP Server。我們找到了Zapier,輕松調用 7000 App 工具。 Zapier配置 ? 訪問 https://actions.zapier.com/settings/mcp/ ? 添加Gmail Send Email工具 ? 授權自己的Gmail郵箱 ? 復制Za…

uniapp 微信小程序使用圖表

使用的是秋云 ucharts 直接在hbuilder插件市場進行下載導入項目中,多端支持 下載地址秋云 ucharts echarts 高性能跨全端圖表組件 - DCloud 插件市場 導入成功后這里就能看到導入的插件啦 導入項目后就可以直接在頁面中通過組件使用了 不需要其余配置 使用簡單 參…

Python數據脫敏技術在大模型機器學習中的深度應用與實踐

一、數據脫敏技術體系詳解 1.1 結構化數據脫敏技術 1.1.1 列級脫敏策略 import pandas as pd from faker import Fakerclass StructuredDataMasker:def __init__(self):self.faker =

【設計模式】GoF設計模式之策略模式(Strategy Pattern)

設計模式之策略模式 Strategy Pattern V1.0核心概念角色代碼示例程序運行結果代碼講解 適用范圍 V1.0 核心概念 策略模式是一種行為型設計模式,其核心思想是業務類執行某個動作時,可以使用該動作的不同的實現,并在程序運行中可以切換使用該…