Redis 之九:Spring Data Redis -- Redis Template 用法

SpringData Redis

Spring Data Redis 是 Spring Data 項目的一部分,它為 Java 應用程序提供了一種便捷的方式來與 Redis 數據庫進行交互。

Spring Data Redis 提供了對 Redis 的抽象封裝,使得開發者能夠以面向對象的方式操作 Redis,并簡化了 Redis 在 Spring 管理的應用中的集成工作。

其主要特性包括:

  1. 自動配置:在使用 Spring Boot 時,通過引入?spring-boot-starter-data-redis?啟動器,可以快速實現自動配置和連接到 Redis 服務器。
  2. 模板類:提供了?RedisTemplate?類,這是一個通用的 Redis 操作類,用于執行 Redis 命令以及轉換鍵值對的序列化和反序列化過程。
  3. Repository 支持:類似于 Spring Data JPA,Spring Data Redis 也支持自定義 Repository 接口,通過繼承?CrudRepositoryPagingAndSortingRepository?或自定義方法來簡化 CRUD 操作。
  4. 數據綁定:可以通過注解或元數據映射將 Java 對象與 Redis 中的數據結構(例如 Hash)關聯起來,簡化復雜類型的操作。
  5. 事務管理:支持 Redis 事務處理,可以通過編程式或者聲明式事務管理來保證數據的一致性。
  6. 發布訂閱(Pub/Sub):提供了對 Redis 發布/訂閱功能的支持,方便構建消息驅動的系統。
  7. 緩存支持:結合 Spring Cache Abstraction,可以利用 Redis 作為分布式緩存解決方案

Spring Data Redis 提供的兩個核心API:RedisTemplate 模板類 和 CrudRepository 持久化接口

下面先來介紹 Spring Data Redis 中的 RedisTemplate 的具體用法

一、配置pom.xml

首先創建springboot項目

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
</dependencies>

二、配置 application

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=1      # 0~15 默認0

三、DAO RedisTemplate依賴

@Autowired
private RedisTemplate redisTemplate;
 public void set(Student student){//保存基本信息  String  注意:不能使用相同的 name 去redis客戶端取值的。redisTemplate.opsForValue().set("name",student.getName());}public void get(String key){String name = redisTemplate.opsForValue().get("name").toString();System.out.println(name);}

四、測試

@SpringBootTest
class DemoApplicationTests {@Autowiredprivate StudentDao studentDao;@Testvoid set() {Student student = new Student();student.setName("AAAAAAAAAAABBBBBBBBBBB");studentDao.set(student);}@Testvoid get(){studentDao.get(null);}
}

就此,來測試是否連通 redis 。保存和取值 String 進行測試。

五、保存一個對象

1. 實體類,實現序列化接口

@Data
public class Student implements Serializable {private String name;private int age;
}

2.編寫DAO

    public void set(Student student){redisTemplate.opsForValue().set("student",student);  //存儲對象}
  public Student get(String key){return (Student) redisTemplate.opsForValue().get(key);}

六、list 類型操作

public void pushlist(){//獲取操作list類型的 工具類ListOperations<String,String> listOperations = redisTemplate.opsForList();listOperations.leftPush("words","Sky");listOperations.leftPush("words","Desk");listOperations.leftPush("words","Person");  //添加隊頭listOperations.rightPush("words","Apple");  //追加隊尾
}
public void rangeList(){ListOperations<String,String> listOperations = redisTemplate.opsForList();List<String> list = listOperations.range("words", 0, Integer.MAX_VALUE);System.out.println(list);
}

七、set 類型

public void setadd(){SetOperations setOperations = redisTemplate.opsForSet();setOperations.add("myset","A","B","C");setOperations.add("myset","X","Y","C");}
public void setmembers(){SetOperations setOperations = redisTemplate.opsForSet();Set myset = setOperations.members("myset");System.out.println(myset);
}

八、zset 類型

public void zsetadd(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();//第三個為score 排序依據分數 權重zSetOperations.add("zset","CCC",5);zSetOperations.add("zset","DDD",3);zSetOperations.add("zset","AAA",1);zSetOperations.add("zset","EEE",2);zSetOperations.add("zset","BBB",4);
}
public void zsetget(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();Set zset = zSetOperations.range("zset", 0, 100);System.out.println(zset);
}

九、hash 類型

public void hashadd(){HashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("person","sid","1001");hashOperations.put("person","age","23");Map<String,String> map = new HashMap<>();map.put("name","諸葛亮");map.put("email","zhuge@sina.com");hashOperations.putAll("person",map);
}public void hashget(){HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();Map<String,String> map =  hashOperations.entries("person");System.out.println(map);
}

十、序列化亂碼問題

使用 RedisTemplate 存取redis的數據時,因為序列化原因,存入的數據看上去亂碼,不是原本設置的key。 但是不影響應用程序的存取。但是直接操作redis 查看還是不太方便。下面來解決這個問題

1. 添加 jackson 依賴

因為下面的配置類需要依賴json

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version>
</dependency>

2. 編寫配置類

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class Config {@Autowiredprivate RedisTemplate redisTemplate;@Beanpublic RedisTemplate redisTemplateInit() {//設置序列化Key的實例化對象redisTemplate.setKeySerializer(new StringRedisSerializer());//設置序列化Value的實例化對象redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());return redisTemplate;}
}

再次運行保存

 public void set(Student student){
//        redisTemplate.opsForValue().set("name",student.getName());redisTemplate.opsForValue().set("student",student);  //存儲對象}

在redis 中就可以看到和使用 student 作為 key 來查看數據了。

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

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

相關文章

matlab 寫入格式化文本文件

目錄 一、save函數 二、fprintf函數 matlab 寫入文本文件可以使用save和fprintf函數 save輸出結果: fprintf輸出結果: 1.23, 2.34, 3.45 4.56, 5.67, 6.78 7.89, 8.90, 9.01 可以看出fprintf輸出結果更加人性化,符合要求,下面分別介紹。 一、save函數 …

linux系統Jenkins工具介紹

Jenkins概念介紹 Jenkins概念Jenkins目的特性產品發布流程 Jenkins概念 Jenkins是一個功能強大的應用程序&#xff0c;允許持續集成和持續交付項目&#xff0c;無論用的是什么平臺。這是一個免費的源代碼&#xff0c;可以處理任何類型的構建或持續集成。集成Jenkins可以用于一些…

MQL5-MT5連接上國內期貨

主要原因是昨天在學習MACD時發現給的基礎代碼感覺不對&#xff0c;但無法證明&#xff0c;因為MT5接的都是外匯交易&#xff0c;數據和國內的文華啥的全對不上&#xff0c;便找了一些國內接CTP的&#xff0c;直接寫代碼有點麻煩&#xff0c;雖然之前對接過國內CTP的東西&#x…

AI入門筆記(三)

神經網絡是如何工作的 神經網絡又是如何工作的呢&#xff1f;我們用一個例子來解釋。我們看下面這張圖片&#xff0c;我們要識別出這些圖片都是0并不難&#xff0c;要怎么交給計算機&#xff0c;讓計算機和我們得出同樣的結果&#xff1f;難點就在于模式識別的答案不標準&…

十二、Nacos源碼系列:Nacos配置中心原理(四)- RefreshEvent 事件處理

前面文章&#xff0c;我們說到回調監聽器的方法中&#xff0c;主要就是發布了一個RefreshEvent事件&#xff0c;這個事件主要由 SpringCloud 相關類來處理。今天我們繼續分析后續的流程。 RefreshEvent 事件會由 RefreshEventListener 來處理&#xff0c;該 listener 含有一個 …

Object類方法

toString(): 返回對象的字符串表示形式。默認情況下&#xff0c;返回對象的類名和哈希碼的十六進制表示。 equals(Object obj): 比較兩個對象是否相等。默認情況下&#xff0c;這個方法比較的是兩個對象的引用是否相同&#xff0c;但是通常會在子類中重寫這個方法以實現自定義…

武器大師——操作符詳解(下)

目錄 六、單目操作符 七、逗號表達式 八、下標引用以及函數調用 8.1.下標引用 8.2.函數調用 九、結構體 9.1.結構體 9.1.1結構的聲明 9.1.2結構體的定義和初始化 9.2.結構成員訪問操作符 9.2.1直接訪問 9.2.2間接訪問 十、操作符的屬性 10.1.優先性 10.2.結合性 …

sql基本語法+實驗實踐

sql語法 注釋&#xff1a; 單行 --注釋內容# 注釋內容多行 /* 注釋內容 */數據定義語言DDL 查詢所有數據庫 show databases;注意是databases而不是database。 查詢當前數據庫 select database();創建數據庫 create database [if not exists] 數據庫名 [default charset 字符…

備戰藍橋杯Day22 - 計數排序

計數排序問題描述 對列表進行排序&#xff0c;已知列表中的數范圍都在0-100之間。設計時間復雜度為O(n)的算法。 比如列表中有一串數字&#xff0c;2 5 3 1 6 3 2 1 &#xff0c;需要將他們按照從小到大的次序排列&#xff0c;得到1 1 2 2 3 3 5 6 的結果。那么此時計數排序是…

一:面試流程

面試 項目介紹功能測試接口測試性能測試測試用例 項目介紹 南網智搜是南方電網公司研發的搜索引擎&#xff0c;主要場景Web 端場景有搜索頻道、個人中心、和一些積分活動等&#xff0c;我在里面主要負責功能測試&#xff0c;接口測試&#xff0c;性能測試&#xff0c;壓力測試…

Jetson Xavier NX 開發板Ubuntu18.04 安裝arduino IDE詳細步驟

Jetson 平臺是arch架構&#xff0c;官網上面幾乎都是x86或者arm64的這兩種錯誤版本都存在匹配問題無法使用&#xff0c;不要下載不要下載&#xff01; uname -a #版本查詢1.正確下載打開方式 https://downloads.arduino.cc/arduino-1.8.19-linuxaarch64.tar.xz選擇自己想要下…

LeetCode #104 二叉樹的最大深度

104. 二叉樹的最大深度 題目 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;3 示例 2&#xff1a; 輸入&#xff1a;root [1,null,2] 輸出&#xff1a;2 分析 …

【Godot4自學手冊】第十九節敵人的血量顯示及掉血特效

這一節&#xff0c;我主要學習敵人的血量顯示、掉血顯示和死亡效果。敵人的血量顯示和主人公的血量顯示有所不同&#xff0c;主要是在敵人頭頂有個紅色的血條&#xff0c;受到攻擊敵人的血條會減少&#xff0c;并且有掉血數量的文字顯示&#xff0c;效果如下&#xff1a; 一、…

《中華人民共和國消防法》(2021年修訂版)解讀

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、舉辦大型群眾性活動&#xff0c;承辦人應當依法向&#xff08;&#xff09;申請安全許可。 正確答案&#xff1a;B、公安機關 2、違反消防安全規定進入生產、儲存易燃易爆危險品場所的&#xff0c;情節嚴重的要處…

基于springboot+vue的醫院后臺管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

胎神游戲集第一期

目錄 一、變色小跳龍 二、超級按鈕 三、超級迷宮 四 、城市守衛戰 五、 憤怒的小胎 既然是胎神游戲集&#xff0c;那當然要先感謝我們的胎神大大了 胎神洛谷名&#xff1a;TSzza 好了&#xff0c;言歸正傳&#xff0c;知道你們不喜歡啰嗦&#xff0c;直接上代碼 一、…

SMBGhost漏洞技術分析與防御方案

事件分析 最近國內外各安全廠商都發布了SMBGhost(CVE-2020-0796)漏洞的預警報告和分析報告&#xff0c;筆者利用周末休息時間也研究了一下&#xff0c;就算是做一個筆記了&#xff0c;分享給大家一起學習下&#xff0c;目前外面研究的POC大部分是通過SMB壓縮數據包長度整數溢出…

【openGL4.x手冊04】基元

一、說明 OpenGL 中的術語“基元”用于指代兩個相似但獨立的概念。 “原語”的第一個含義是指 OpenGL 使用的解釋方案來確定渲染時頂點流所代表的內容&#xff0c;例如“GL_POINTS”。這樣的頂點序列可以是任意長的。 “原語”的另一個含義&#xff0c;也稱為“基本原語”&…

如何根據玩家數量和游戲需求選擇最合適的服務器配置?

根據玩家數量和游戲需求選擇最合適的服務器配置&#xff0c;首先需要考慮游戲的類型、玩家數量、預計的在線時間以及對內存和CPU性能的需求綜合考慮。對于大型多人在線游戲&#xff0c;如MMORPG或MOBA等&#xff0c;由于需要更多的CPU核心數來支持更復雜的游戲邏輯和處理大量數…

操作系統|概述|系統分類——筆記

1.1_1操作系統的概念和功能 操作系統的概念 操作系統&#xff08;Operating System&#xff0c; OS&#xff09; 是指控制和管理整個計算機系統的 硬件和軟件 資源&#xff0c;并合理地組織調度計算機和工作和資源的分配&#xff1b; 1操作系統是系統資源的管理者 以提供給用…