Spring Boot 集成Redis中 RedisTemplate 及相關操作接口對比與方法說明

RedisTemplate 及相關操作接口對比與方法說明


1. RedisTemplate 核心接口與實現類

RedisTemplate 是 Spring Data Redis 的核心模板類,通過 opsFor... 方法返回不同數據類型的操作接口,每個接口對應 Redis 的一種數據結構。以下是主要接口及其實現類:


2. 各操作接口及方法說明
(1) RedisValueOperations<K, V>
  • 對應數據類型:字符串(String)
  • 實現類DefaultRedisScriptingOperations(內部實現)
  • 主要方法
    • set(K key, V value):設置鍵值對。
    • set(K key, V value, long offset):設置指定偏移量的值(如追加字符串)。
    • getExpire(K key):獲取鍵的剩余過期時間(毫秒)。
    • multiSet(Map<K, V> map):批量設置鍵值對。
    • increment(K key, long delta):對數值鍵執行遞增操作。
    • append(K key, String value):追加字符串到現有值末尾。

(2) RedisHashOperations<K, HK, HV>
  • 對應數據類型:哈希(Hash)
  • 實現類DefaultHashOperations(內部實現)
  • 主要方法
    • put(K key, HK hashKey, HV hashValue):在哈希中設置字段值。
    • get(K key, HK hashKey):獲取哈希中的字段值。
    • entries(K key):獲取哈希中所有字段和值。
    • hasKey(K key, HK hashKey):判斷哈希中是否存在字段。
    • increment(K key, HK hashKey, long delta):遞增哈希中的數值字段。

(3) RedisListOperations<K, V>
  • 對應數據類型:列表(List)
  • 實現類DefaultListOperations(內部實現)
  • 主要方法
    • leftPush(K key, V value):從左側(頭)插入元素。
    • rightPush(K key, V value):從右側(尾)插入元素。
    • leftPop(K key):彈出并返回左側元素。
    • range(K key, long start, long end):獲取列表切片。
    • trim(K key, long start, long end):截取列表到指定范圍。

(4) RedisSetOperations<K, V>
  • 對應數據類型:集合(Set)
  • 實現類DefaultSetOperations(內部實現)
  • 主要方法
    • add(K key, V... values):添加元素到集合。
    • remove(K key, V... values):從集合中移除元素。
    • members(K key):獲取集合中所有元素。
    • isMember(K key, V value):判斷元素是否存在于集合中。
    • randomMember(K key):隨機獲取一個元素。

(5) RedisZSetOperations<K, V>
  • 對應數據類型:有序集合(Sorted Set)
  • 實現類DefaultZSetOperations(內部實現)
  • 主要方法
    • add(K key, V value, double score):添加元素及分數。
    • rangeByScore(K key, double min, double max):按分數范圍獲取元素。
    • score(K key, V value):獲取元素的分數。
    • removeRangeByScore(K key, double start, double end):按分數范圍刪除元素。
    • rank(K key, V value):獲取元素的排名(從小到大)。

(6) RedisGeoOperations<K, V>
  • 對應數據類型:地理位置(Geo)
  • 實現類DefaultGeoOperations(內部實現)
  • 主要方法
    • add(K key, V member, double longitude, double latitude):添加地理位置。
    • distance(K key, V member1, V member2):計算兩點距離。
    • radius(K key, double longitude, double latitude, double radius, RedisGeoCommands.DistanceUnit unit):獲取指定半徑內的元素。
    • position(K key, V member):獲取元素的經緯度坐標。

(7) RedisStreamOperations<K, V>
  • 對應數據類型:流(Stream,Redis 5+)
  • 實現類DefaultStreamOperations(內部實現)
  • 主要方法
    • add(K key, StreamEntryID id, Map<Field, V> values):向流中添加條目。
    • read(K key, StreamOffset<K> streamOffset):讀取流數據。
    • acknowledge(K key, Consumer consumer, StreamEntryID... ids):確認已處理的條目。
    • trim(K key, long maxEntries):按最大條目數截斷流。

對比表格

接口對應數據類型核心方法典型場景
RedisValueOperations字符串(String)set, get, increment, append簡單鍵值存儲(如計數器、緩存)
RedisHashOperations哈希(Hash)put, get, entries, increment對象屬性存儲(如用戶資料)
RedisListOperations列表(List)leftPush, rightPush, leftPop, range隊列/棧操作(如消息隊列)
RedisSetOperations集合(Set)add, remove, members, isMember去重存儲(如標簽、唯一用戶列表)
RedisZSetOperations有序集合(ZSet)add, rangeByScore, score, rank排名/優先級隊列(如排行榜)
RedisGeoOperations地理位置(Geo)add, distance, radius, position地理信息查詢(如附近商家)
RedisStreamOperations流(Stream)add, read, acknowledge, trim流式數據處理(如日志、事件隊列)

總結與建議

  1. 選擇接口:根據 Redis 數據類型選擇對應操作接口(如列表用 RedisListOperations)。
  2. 原子性操作:復雜操作可通過 RedisTemplate.execute(SessionCallback) 實現事務性。
  3. 性能優化
    • 批量操作(如 multiSet)減少網絡開銷。
    • 使用 RedisTemplate.setEnableTransactionSupport(true) 開啟事務支持。
  4. 高級功能:如地理位置查詢(RedisGeoOperations)或流處理(RedisStreamOperations)需結合具體業務場景。

示例代碼

@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void demoOperations() {// 字符串操作redisTemplate.opsForValue().set("counter", 0);redisTemplate.opsForValue().increment("counter", 1); // 原子遞增// 哈希操作redisTemplate.opsForHash().put("user:1001", "name", "張三");redisTemplate.opsForHash().increment("user:1001", "age", 1);// 列表操作redisTemplate.opsForList().rightPush("queue", "message1");redisTemplate.opsForList().leftPop("queue");// 地理位置redisTemplate.opsForGeo().add("locations", "星巴克", 116.397428, 39.90923;);redisTemplate.opsForGeo().radius("locations", 116.3, 39.9, 1000, KILOMETERS);}
}

根據業務需求選擇合適的數據類型和接口,靈活使用 Redis 的強大功能!

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

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

相關文章

linux內核漏洞檢測利用exp提權

案例一dirtycow&#xff08;CVE-2016-5159&#xff09; 有個前置知識就是 獲取liunx的內核 hostnamectl uname -a 然后這個內核漏洞進行提權的步驟也是和手工win進行提權差不多 也是需要使用輔助工具在本地進行輔助檢測 然后去nomi-sec/PoC-in-GitHub&#xff1a; &#…

重磅 | CertiK《Hack3d:2025第一季度安全報告》(附報告全文鏈接)

CertiK《Hack3d&#xff1a;2025年第一季度安全報告》現已發布&#xff0c;本次報告深入分析了2025年1至3月Web3.0領域的安全狀況。2025年第一季度共發生197起安全事件&#xff0c;總損失約為16.7億美元&#xff0c;環比激增303.4%。其中Bybit事件導致約14.5億美元的損失&#…

經典卷積神經網絡LeNet實現(pytorch版)

LeNet卷積神經網絡 一、理論部分1.1 核心理論1.2 LeNet-5 網絡結構1.3 關鍵細節1.4 后期改進1.6 意義與局限性二、代碼實現2.1 導包2.1 數據加載和處理2.3 網絡構建2.4 訓練和測試函數2.4.1 訓練函數2.4.2 測試函數2.5 訓練和保存模型2.6 模型加載和預測一、理論部分 LeNet是一…

二維碼掃不出?用QR Research工具

一.簡介 簡單來說QR Research就是用來掃二維碼的工具 當二維碼模糊不清&#xff0c;無法用普通方式掃時&#xff0c;就可以用QR Research輕松掃描。QR Research還可以分析變形/破損二維碼&#xff08;修復或提取有效部分&#xff09; 二.下載安裝 QR Research 三.例題 這…

02_使用Docker在服務器上部署Jekins實現項目的自動化部署

02_使用Docker在服務器上部署jenkins實現項目的自動化部署 一、使用docker拉取阿里云容器私有鏡像倉庫內的jenkins鏡像 登錄阿里云Docker Registry $ sudo docker login --usernamewxxxo1xxx registry.cn-shanghai.aliyuncs.com用于登錄的用戶名為阿里云賬號全名&#xff0c…

微服務組件——Eureka組件的安裝與使用指南

文章目錄 一、Eureka Server的安裝與配置1、創建Spring Boot項目2、添加依賴3、配置Eureka Server4、啟用Eureka Server5、啟動并訪問Dashboard 二、Eureka Client的配置&#xff08;服務注冊&#xff09;1、添加客戶端依賴2、配置客戶端3、啟用服務發現4、啟動服務 三、服務發…

探索Doris:日志分析的新寵,是否能取代老牌ES?

在大數據時代&#xff0c;日志存儲與分析對于企業的運營和決策起著至關重要的作用。Elasticsearch&#xff08;簡稱 ES&#xff09;作為一款廣泛應用的開源分布式搜索和分析引擎&#xff0c;長期以來在日志管理領域占據著舉足輕重的地位。然而&#xff0c;隨著技術的不斷發展&a…

學習threejs,使用Texture紋理貼圖,測試repeat重復紋理貼圖

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??Texture 紋理貼圖1.1.1 ??…

圖像配準及識別

一、圖像配準基礎 圖像配準&#xff0c;聽起來很高大上&#xff0c;其實用大白話來說&#xff0c;就是“讓兩張照片對齊”的技術。想象一下&#xff0c;你有兩張拍得不完全一樣的照片&#xff0c;比如一張是你從正面拍的風景&#xff0c;另一張是從側面拍的同一個地方&#xff…

QT之QML(簡單示例)

需求一&#xff1a;點擊按鈕彈出菜單&#xff0c;并且自定義菜單彈出位置。 mouse.x 和 mouse.y 獲取的是相對于 MouseArea&#xff08;在這個例子中是 Button&#xff09;左上角的局部坐標。如果你想要在鼠標點擊位置顯示 Menu&#xff0c;你需要將這個局部坐標轉換為相對于應…

如何編寫單元測試

一、前言知識 1.開發過程 需求分析->設計->開發->測試->上線 2.測試種類 單元測試(測試模塊編碼)、黑盒測試(測試功能是否滿足需求)、白盒測試(測試程序內部的邏輯結構)、回歸測試(提出的缺陷進行二次驗證)、集成測試(測試主要的業務功能及模塊間的整合性)、系…

LeetCode 解題思路 30(Hot 100)

解題思路&#xff1a; 遞歸參數&#xff1a; 生成括號的對數 n、結果集 result、當前路徑 path、左括號數 open、右括號數 close。遞歸過程&#xff1a; 當當前路徑 path 的長度等于 n * 2 時&#xff0c;說明已經生成有效括號&#xff0c;加入結果集。若左括號數小于 n&…

【Golang】Windows系統鍵鼠空閑監測練習

在本文中&#xff0c;我們將練習如何使用Golang編寫一個簡單的Windows系統空閑時間監測工具。該工具能夠檢測系統的空閑時間&#xff0c;并在達到一定閾值時計數。 功能概述 監控鼠標和鍵盤的空閑事件&#xff0c;每空閑超過50s&#xff0c;觸發次數加一。 該工具具有以下功…

關于React Redux

官網&#xff1a;&#x1f449;詳情一 &#x1f449;詳情二 &#x1f449;關于redux 使用原因&#xff1a;&#x1f449;詳情 /** 2-1、隨著javascript單頁應用程序的發展&#xff0c;需要在代碼中管理更多的狀態&#xff08;包括服務器響應數據、緩存數據、本地創建還未發送…

MySQL和Oracle批量插入SQL差異詳解

文章目錄 MySQL和Oracle批量插入SQL差異詳解1. 基本批量插入語法1.1 MySQL批量插入1.2 Oracle批量插入 2. 帶序列的批量插入2.1 MySQL帶自增ID的批量插入2.2 Oracle帶序列的批量插入 3. 條件批量插入3.1 MySQL條件批量插入3.2 Oracle條件批量插入 MySQL和Oracle批量插入SQL差異…

43頁可編輯PPT | 大數據管理中心設計規劃方案大數據中心組織架構大數據組織管理

這份文檔是一份關于大數據管理中心規劃設計方案的詳細報告&#xff0c;涵蓋了背景與需求分析、整體規劃方案、關鍵能力實現方案以及實施方案等內容。報告強調大數據在城市治理中的重要性&#xff0c;提出通過構建統一的大數據平臺&#xff0c;整合城市各部門數據資源&#xff0…

Python-八股總結

目錄 1 python 垃圾處理機制2 yield3 python 多繼承&#xff0c;兩個父類有同名方法怎么辦&#xff1f;4 python 多線程/多進程/協程4.1 多線程與GIL全局解釋器鎖4.2 多進程4.3 協程 5 樂觀鎖/悲觀鎖6 基本數據結構**1. 列表&#xff08;List&#xff09;****2. 元組&#xff0…

HTML 標簽類型全面介紹

HTML 標簽類型全面介紹 HTML&#xff08;HyperText Markup Language&#xff09;是構建 Web 頁面結構的基礎語言。HTML 由不同類型的標簽組成&#xff0c;每種標簽都有特定的用途。本文將全面介紹 HTML 標簽的分類及其用法。 1. HTML 標簽概述 HTML 標簽通常成對出現&#xf…

vscode中的【粘滯滾動】的基本概念和作用,關閉了以后如何開啟

1、粘滯滾動的基本概念和作用 ?VSCode中的“粘滯”功能主要是指編輯器在滾動時的一種特殊效果&#xff0c;使得編輯器在滾動到某個位置時會“粘”在那里&#xff0c;而不是平滑滾動到底部或頂部。? 粘滯滾動的基本概念和作用 粘滯滾動功能可以讓用戶在滾動時更直觀地看到當前…

【商城實戰(101)】電商未來已來:新技術引領商城發展新航向

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…