Redis設計與實現——Redis命令參考與高級特性

Redis命令參考

數據類型相關命令
  • SET:設置鍵值,支持過期時間、不存在/存在條件。
  • GET:獲取鍵值,若鍵不存在返回 nil
  • INCR/DECR:將鍵的整數值增1/減1,鍵不存在時初始化為0。
  • MSET/MGET:批量設置/獲取多個鍵值。
  • LPUSH/RPUSH:從列表左/右側插入元素。
  • LPOP/RPOP:移除并返回列表左/右側第一個元素。
  • LRANGE:獲取列表指定范圍的元素。
  • HSET/HGET:設置/獲取哈希字段值。
  • HGETALL:獲取哈希所有字段和值。
  • HINCRBY:哈希字段整數值增加指定數值。
  • SADD/SREM:添加/移除集合元素。
  • SMEMBERS:返回集合所有元素(慎用大集合)。
  • SINTER/SUNION:返回多個集合的交集/并集。
  • ZADD:添加帶分值的成員到有序集合。
  • ZRANGE/ZREVRANGE:按分值升序/降序返回有序集合成員。
  • ZINCRBY:增加有序集合成員的分值。
事務與腳本
  • MULTI:開啟事務,后續命令入隊。
  • EXEC:執行事務隊列中的所有命令。
  • WATCH/UNWATCH:監視鍵變化,若被修改則事務中止。
  • EVAL:執行Lua腳本,支持原子性操作。
  • EVALSHA:通過SHA1執行緩存的腳本。
  • SCRIPT LOAD:加載腳本到緩存,返回SHA1摘要。
持久化與備份
  • SAVE:同步生成RDB快照,阻塞主線程。
  • BGSAVE:異步生成RDB快照,子進程執行。
  • LASTSAVE:返回最后一次成功生成RDB的時間戳。
  • BGREWRITEAOF:異步重寫AOF文件,優化體積。
  • APPEND:追加值到鍵(底層AOF操作)。
集群與高可用
  • SLAVEOF/REPLICAOF:將當前節點設置為指定主節點的從節點。
  • CLUSTER INFO:返回集群基本信息(狀態、槽分配)。
  • CLUSTER NODES:列出集群所有節點的詳細信息。
  • CLUSTER ADDSLOTS:將指定哈希槽分配給當前節點。
  • SENTINEL MASTERS:列出被監控的主節點信息。
  • SENTINEL GET-MASTER-ADDR-BY-NAME:獲取主節點地址。
系統管理與監控
  • CLIENT LIST:列出所有客戶端連接信息。
  • CLIENT KILL:關閉指定客戶端連接。
  • INFO:返回服務器狀態信息(內存、CPU、復制等)。
  • SLOWLOG:查看慢查詢日志。
  • MONITOR:實時監控所有命令(生產環境慎用)。
高級功能
  • SUBSCRIBE/PUBLISH/UNSUBSCRIBE:訂閱/發布/取消訂閱頻道消息。
  • GEOADD:添加地理位置坐標。
  • GEODIST:計算兩地距離。
  • GEORADIUS:返回指定半徑內的位置。
其他實用命令
  • KEYS/SCAN:查找匹配模式的鍵(SCAN 非阻塞迭代)。
  • TTL/PTTL:獲取鍵的剩余過期時間(秒/毫秒)。
  • EXPIRE/PEXPIRE:設置鍵的過期時間(秒/毫秒)。
  • TYPE:返回鍵的數據類型。
  • DEL:刪除指定鍵。

事務

事務的核心命令
  • MULTI:標記事務開始,后續命令按順序入隊,暫不執行。
  • EXEC:執行事務隊列中的所有命令,返回各命令的結果。
  • DISCARD:取消事務,清空命令隊列。
  • WATCH <key>:監視指定鍵,若事務執行前鍵被修改,則事務終止(類似 CAS 機制)。
  • UNWATCH:取消所有 WATCH 監控。
事務的特性
  • 原子性EXEC 執行時,所有命令按順序一次性執行,不會被其他客戶端命令打斷。
  • 無回滾:若命令入隊時語法錯誤,事務直接拒絕執行;運行時錯誤(如對字符串執行 INCR)會繼續執行后續命令。
  • 隔離性:事務執行期間不會被其他客戶端操作干擾(單線程模型保證)。
  • 無持久性:是否持久化取決于 Redis 的持久化配置(RDB/AOF)。
適用場景
  • 批量操作原子性:如批量更新計數器、配置項。
  • 簡單 CAS 操作:結合 WATCH 實現樂觀鎖,避免競態條件(如庫存扣減、余額轉賬)。
  • 非回滾型任務:無需回滾的連續操作(如日志記錄、狀態標記)。
生產環境建議
  • 避免長事務:事務隊列命令過多會阻塞其他客戶端,影響性能。
  • 優先使用 Lua:復雜邏輯用 Lua 腳本替代事務,減少網絡開銷。
  • 合理使用 WATCH:監控最少數量的鍵,降低沖突概率。

Lua腳本

Lua 腳本的核心優勢
  • 原子性:腳本整體執行,期間不會被其他命令中斷,保證數據一致性。
  • 減少網絡開銷:合并多個操作到單個腳本,減少客戶端與服務端的通信次數。
  • 復雜邏輯支持:支持條件判斷、循環、變量等編程結構,靈活處理業務邏輯。
  • 高性能:腳本在服務端執行,避免多次網絡往返,提升吞吐量。
Lua 腳本的執行方式
  • EVAL 命令格式EVAL <script> <numkeys> [KEYS...] [ARGV...]

    • script:Lua 腳本代碼。
    • numkeys:鍵參數的數量(KEYS 數組長度)。
    • KEYS:鍵名列表(避免硬編碼,通過參數傳遞)。
    • ARGV:額外參數列表(如數值、標志位)。
  • 緩存腳本執行

    • 預加載腳本SCRIPT LOAD "return redis.call('GET', KEYS[1])"
    • 通過 SHA1 執行EVALSHA abcdef12345... 1 user:1
Lua 腳本與 Redis 命令的交互
  • 調用 Redis 命令

    • redis.call():執行 Redis 命令,若命令出錯(如鍵不存在),直接返回錯誤并終止腳本。

      local value = redis.call('GET', KEYS[1])
      
    • redis.pcall():執行 Redis 命令,出錯時返回 Lua 錯誤表,腳本繼續執行。

      local ok, result = pcall(redis.call, 'GET', KEYS[1])
      
  • 參數傳遞與返回值

    • 鍵和參數分離KEYSARGV 是 Lua 表(數組),索引從 1 開始;嚴格區分鍵和參數,避免邏輯混亂。

    • 返回值處理:腳本最終返回值會被轉換為 Redis 協議格式(Lua表轉為多行回復);支持返回nil對應(Redis的 NULL 回復)。

Lua 腳本的使用原則
  • 原子性與阻塞

    • 長時間腳本阻塞:腳本執行期間阻塞其他操作,需避免復雜循環或大量計算;單個腳本執行時間控制在ms級,必要時拆分邏輯。
  • 沙盒環境限制

    • 禁用危險操作:無法訪問文件系統、網絡或調用外部命令;禁止定義全局變量(需使用 local 聲明局部變量)。
  • 腳本復用性

    • 參數化設計:鍵和參數通過 KEYS/ARGV 傳遞,避免硬編碼,提高腳本通用性。

    • 版本兼容性:不同 Redis 版本支持的 Lua 庫函數可能不同(如 redis.breakpoint() 僅限調試模式)。

排序

排序參數詳解
  • ASC/DESC:升序(默認)或降序排序。
  • ALPHA:按字典序排序字符串元素。
  • BY <pattern>:按外部鍵的值排序(如 user:*:age)。
  • GET <pattern>:排序后返回外部鍵的值(可多次使用)。
  • LIMIT offset count:分頁獲取結果(類似 SQL 的 LIMIT)。
  • STORE <key>: 將排序結果存入新鍵(列表類型)。
排序的工作原理
  • 數據加載:從列表、集合或有序集合中提取元素;若使用 BYGET,加載外部鍵的值到內存。
  • 排序執行:默認按數值比較(ALPHA 啟用字符串比較);使用快速排序算法,時間復雜度 O(N log N)
  • 結果處理:應用 LIMIT 分頁;按 GET 返回指定數據或直接返回元素;若指定 STORE,將結果保存為新列表。

發布與訂閱

核心機制
  • 角色
    • 發布者(Publisher):通過 PUBLISH <channel> <message> 發送消息到頻道。
    • 訂閱者(Subscriber):通過 SUBSCRIBE <channel> 訂閱頻道,或 PSUBSCRIBE <pattern> 按模式匹配訂閱(如 news.*)。
    • 退訂UNSUBSCRIBEPUNSUBSCRIBE 取消訂閱。
  • 消息傳遞:消息從發布者直接推送到所有訂閱者,無中間存儲;消息不可回溯,訂閱者斷開后重連會丟失未連接期間的消息。
關鍵命令與行為
  • SUBSCRIBE channel1:訂閱指定頻道。
  • PSUBSCRIBE news.*:按模式訂閱所有以 news. 開頭的頻道。
  • PUBLISH channel1 “Hello”:向 channel1 發布消息 “Hello”。
  • UNSUBSCRIBE:退訂所有頻道。

慢查詢日志

核心配置參數
  • slowlog-log-slower-than

    • 作用:定義慢查詢的時間閾值(單位:微秒,1秒=1,000,000微秒)。

    • 示例

      config set slowlog-log-slower-than 10000  # 記錄超過10毫秒的命令
      
  • slowlog-max-len

    • 作用:設置慢查詢日志的最大條目數(內存中存儲,先進先出)。

    • 示例

      config set slowlog-max-len 500  # 最多保存500條慢查詢記錄
      
查看與分析慢查詢日志
  • SLOWLOG GET [n]:查看最新的n條記錄(默認全部)。
  • SLOWLOG LEN`:查看當前日志條目數。
  • SLOWLOG RESET:清空慢查詢日志。

監視器

MONITOR 的功能與使用
  • 啟用監控:客戶端執行 MONITOR 后,Redis 會將該連接轉為監控模式,實時打印所有命令及其參數:
  • 輸出格式
    • 時間戳:命令執行的精確時間(秒.微秒)。
    • 客戶端信息:數據庫編號、客戶端 IP 和端口。
    • 命令內容:完整的命令及參數。
MONITOR 的性能影響
  • 高并發寫入: 每個命令都會觸發 MONITOR 輸出,占用大量 CPU 和帶寬,可能拖慢 Redis 整體性能。
  • 監控客戶端網絡延遲:MONITOR 輸出量大時,可能阻塞客戶端連接,導致其他操作延遲。
  • 內存消耗:Redis 需為每個監控連接維護輸出緩沖區,內存壓力增大。

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

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

相關文章

基于 STM32 的全自動洗車監控系統設計與實現

摘要 本文提出一種基于 STM32F103RCT6 芯片的全自動洗車監控系統方案,通過多傳感器融合與智能控制算法,實現車輛檢測、洗車流程自動化及狀態遠程監控。系統集成硬件選型、電路設計、軟件流程及通信功能,可廣泛應用于智能洗車場景。 一、硬件系統設計 1. 核心芯片選型 主控…

掌握Multi-Agent實踐(七):基于AgentScope分布式模式實現多智能體高效協作[并行加速大模型輔助搜索、分布式多用戶協同辯論賽]

之前的案例都是運行在單臺機器上以單進程形式運行,受限于 Python 的全局解釋器鎖,實際只能有效利用一個 CPU 的計算資源,并且無法支持多個用戶從自己的電腦上接入同一個 Multi-Agent 應用進行交互。?為了提高運行效率并支持多用戶接入同一個應用中,AgentScope 提供了分布式…

docker-compose部署項目(springboot服務)以及基礎環境(mysql、redis等)ruoyi-ry

上傳jar 配置文件等 到目錄&#xff1a;/home/ruoyi/docker 設置權限 chmod x *.sh 開通端口&#xff08;我已經開通了&#xff09; sh ./deploy.sh port 開始構建 docker-compose build 構建成功 可以先拉取鏡像 docker pull nacos/nacos-server docker pull nginx docker …

Axure疑難雜癥:統計分析頁面引入Echarts示例動態效果

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:統計分析頁面引入Echarts示例動態效果 主要內容:echart示例引入、大小調整、數據導入 應用場景:統計分析頁面…

如何使用WordPress創建美食博客

不管你是否意識到&#xff0c;食物是我們生活的核心。有些人將其用作燃料&#xff0c;而另一些人則將食譜作為一種藝術形式呈現。如果您屬于后者&#xff0c;并且想創建一個美食博客來分享您的熱情&#xff0c;那么WordPress是一個頂級平臺。 幾乎每個話題都有一個博客利基&am…

【MySQL】庫與表的操作

一、庫的操作 1. 查看數據庫 語法&#xff1a;show databases;這里的database是要加s的 查看當前自己所處的數據庫&#xff1a;select database(); 例如下圖&#xff0c;我當前所處的數據庫就是在class1數據庫 2. 創建數據庫 語法&#xff1a;create database [if not e…

Unity3D開發AI桌面精靈/寵物系列 【六】 人物模型 語音口型同步 LipSync 、梅爾頻譜MFCC技術、支持中英文自定義編輯- 基于 C# 語言開發

Unity3D開發AI桌面精靈/寵物系列 【六】 人物模型 語音口型同步 LipSync 、梅爾頻譜MFCC技術 C# 語言開發 該系列主要介紹怎么制作AI桌面寵物的流程&#xff0c;我會從項目開始創建初期到最終可以和AI寵物進行交互為止&#xff0c;項目已經開發完成&#xff0c;我會仔細梳理一下…

MoonBit正式入駐GitCode!AI時代的編程語言新星,開啟高性能開發新紀元

在AI與編程語言深度交融的今天&#xff0c;開發者們正見證一場技術生產力的革命。由IDEA研究院基礎軟件中心傾力打造的MoonBit&#xff08;月兔&#xff09;編程語言&#xff0c;自2023年橫空出世以來&#xff0c;憑借高性能、低延遲、輕量化的特性&#xff0c;迅速成為全球開發…

LLMs:《POE報告:2025年春季人工智能模型使用趨勢》解讀

LLMs&#xff1a;《POE報告&#xff1a;2025年春季人工智能模型使用趨勢》解讀 導讀&#xff1a;2025年5月13日&#xff0c;該報告基于 Poe 平臺的用戶數據&#xff0c;分析了 2025 年春季人工智能模型的使用趨勢。報告指出&#xff0c;人工智能格局快速演變&#xff0c;通用文…

STM32 之網口資源

1 網口資源介紹 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器&#xff0c;具備多種外設接口&#xff0c;其中包括一個 Ethernet MAC 控制器&#xff08;帶 IEEE 1588 支持&#xff09;。這意味著你可以使用 STM32F407 實現網絡通信功能&#xff08;通…

Almalinux中出現ens33 ethernet 未托管 -- lo loopback 未托管 --如何處理:

解決 AlmaLinux 中網絡接口 ens33 和 lo 顯示為“未托管”的問題 當 AlmaLinux 系統中的網絡接口&#xff08;如 ens33 和 lo&#xff09;顯示為“未托管”時&#xff0c;這意味著這些接口沒有被 NetworkManager 正常管理。以下是詳細的分析和解決方案&#xff1a; 1. 檢查 N…

數據庫中關于查詢選課問題的解法

前言 今天上午起來復習了老師上課講的選課問題。我總結了三個解法以及一點注意事項。 選課問題介紹 簡單來說就是查詢某某同學沒有選或者選了什么課。然后查詢出該同學的姓名&#xff0c;學號&#xff0c;課程號&#xff0c;課程名之類的。 sql文件我上傳了。大家可以嘗試練…

Qt圖表庫推薦指南與分析

目錄 一、核心圖表庫橫向對比1. Qt Charts2. QCustomPlot3. QWT (Qt Widgets for Technical Applications)4. KD Chart 二、性能與功能對比矩陣三、選型策略與組合方案1. 通用型需求&#xff1a;2. 技術型場景&#xff1a;3. 企業級開發&#xff1a; 四、未來趨勢與避坑指南1. …

LangGraph 2 - 智能體開發、流式傳輸、模型調用、工具、MCP、上下文、內存、人機協同、部署、UI

文章目錄 使用LangGraph進行智能體開發什么是智能體&#xff1f;核心特性高層構建模塊包生態系統 運行代理基礎用法輸入與輸出輸入格式使用自定義 Agent 狀態 輸出格式流式輸出最大迭代次數其他資源 流式傳輸代理進度監控LLM 令牌工具更新流式多模態傳輸禁用流式傳輸其他資源 L…

Android同屏采集并推送RTMP和啟動輕量級RTSP服務技術實踐

隨著視頻直播需求的不斷提升&#xff0c;如何實現高效的實時視頻采集和推流&#xff0c;成為了開發者們關注的重點。本文將結合大牛直播SDK&#xff0c;介紹如何在 Android 平臺實現 同屏采集、推送 RTMP 流&#xff0c;以及如何啟動輕量級 RTSP 服務&#xff0c;讓開發者快速搭…

如何自定義 Spring MVC 的配置?

我們可以通過實現 WebMvcConfigurer 接口來自定義 Spring MVC (尤其是在 Spring Boot 環境中) 的配置。 以下是通過實現 WebMvcConfigurer 接口的配置方法&#xff1a; 核心&#xff1a;創建一個 Configuration 類并實現 WebMvcConfigurer import org.springframework.conte…

如何提升新加坡SAP實施成功率?解答中企出海的“稅務合規密碼” | 工博科技SAP金牌服務商

目錄 中新雙邊經貿合作概況 ?編輯 新加坡數字化實施核心挑戰 一、財稅合規體系適配 稅務申報差異 會計準則協同 二、人力資源合規管理 薪酬體系配置 數據安全規范 企業實施建議方案 一、系統建設策略 選擇具備以下資質的實施服務商&#xff1a; 構建標準化功能模塊…

人工智能視角下的安全:可視化如何塑造惡意軟件檢測

摘要 惡意軟件是一種持續存在的網絡安全威脅&#xff0c;它越來越多地通過復雜的攻擊向量&#xff0c;瞄準互連的數字系統&#xff0c;如桌面、移動和物聯網平臺。通過利用這些漏洞&#xff0c;攻擊者會損害現代數字生態系統的完整性和彈性。為了應對這一風險&#xff0c;安全…

游戲引擎學習第293天:移動Familiars

回顧并為今天的內容定下基調 我們正在做一款完整的游戲&#xff0c;今天的重點是“移動模式”的正式化處理。目前雖然移動機制大致能運作&#xff0c;但寫法相對粗糙&#xff0c;不夠嚴謹&#xff0c;我們希望將其清理得更規范&#xff0c;更可靠一點。 目前腦邏輯&#xff0…

golang -- 如何讓main goroutine等一等

目錄 引言一、sync.WaitGroup二、channel創建channle操作緩沖多返回值模式單向通道 引言 在不做修飾的程序中&#xff0c;代碼是串行執行的 串行、并發與并行串行&#xff1a;事物按照一定的發展順序并發&#xff1a;同一時間段執行多個任務&#xff08;一邊吃飯一邊看電視&am…