Spring Data Redis 使用方式

在Java中操作Redis

  • 1. 在Java中操作Redis
    • 1.1 Redis的Java客戶端
    • 1.2 Spring Data Redis使用方式
      • 1.2.1 介紹
      • 1.2.1 環境搭建
      • 1.2.3 操作常見類型數據

1. 在Java中操作Redis

1.1 Redis的Java客戶端

Redis 的 Java 客戶端很多,常用的幾種:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring 對 Redis 客戶端進行了整合,提供了 Spring Data Redis,在Spring Boot項目中還提供了對應的Starter,即 spring-boot-starter-data-redis

1.2 Spring Data Redis使用方式

1.2.1 介紹

Spring Data Redis 是 Spring 的一部分,提供了在 Spring 應用中通過簡單的配置就可以訪問 Redis 服務,對 Redis 底層開發包進行了高度封裝。在 Spring 項目中,可以使用Spring Data Redis來簡化 Redis 操作。

網址:https://spring.io/projects/spring-data-redis

Spring Boot提供了對應的Starter,maven坐標:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis中提供了一個高度封裝的類:RedisTemplate,對相關api進行了歸類封裝,將同一類型操作封裝為operation接口,具體分類如下:

  • ValueOperations:string數據操作
  • SetOperations:set類型數據操作
  • ZSetOperations:zset類型數據操作
  • HashOperations:hash類型的數據操作
  • ListOperations:list類型的數據操作

1.2.1 環境搭建

1). 導入Spring Data Redis的maven坐標

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2). 配置Redis數據源

在application-dev.yml中添加

sky:redis:host: localhostport: 6379password: 123456database: 10

解釋說明:

database:指定使用Redis的哪個數據庫,Redis服務啟動后默認有16個數據庫,編號分別是從0到15。

可以通過修改Redis配置文件來指定數據庫的數量。

3). 編寫配置類,創建RedisTemplate對象

package com.sky.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("開始創建redis模板對象");RedisTemplate redisTemplate = new RedisTemplate();// 設置redis的連接工廠對象redisTemplate.setConnectionFactory(redisConnectionFactory);// 設置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

解釋說明:

當前配置類不是必須的,因為 Spring Boot 框架會自動裝配 RedisTemplate 對象,但是默認的key序列化器為

JdkSerializationRedisSerializer,導致我們存到Redis中后的數據和原始數據有差別,故設置為

StringRedisSerializer序列化器。

4). 通過RedisTemplate對象操作Redis

在test下新建測試類

package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringRedisTest {@AutowiredRedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){// string操作類型ValueOperations valueOperations = redisTemplate.opsForValue();// hash操作類型HashOperations hashOperations = redisTemplate.opsForHash();// list操作類型ListOperations listOperations = redisTemplate.opsForList();// set操作類型SetOperations setOperations = redisTemplate.opsForSet();// zet操作類型ZSetOperations zSetOperations = redisTemplate.opsForZSet();}

1.2.3 操作常見類型數據

1). 操作字符串類型數據

@Testpublic void testRedisString(){// set, get, setex, setnxValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name", "lsm");String name = (String) valueOperations.get("name");System.out.println(name);valueOperations.set("code", "1234", 3, TimeUnit.MINUTES);valueOperations.setIfAbsent("lock", 1);valueOperations.setIfAbsent("lock", 2);System.out.println(valueOperations.get("lock"));}

2). 操作列表類型數據

@Testpublic void testRedisList(){// lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPush("list", "a");listOperations.leftPushAll("list", "b", "c", "d" );  // 依次入棧,棧頂為右邊,棧底為左邊String tmp = (String) listOperations.leftPop("list");System.out.println("tmp: " + tmp);  // tmp: dLong size = listOperations.size("list");System.out.println("size: " + size);List list = listOperations.range("list", 0, -1);System.out.println("list: " + list); // list: [c, b, a]}

3). 操作哈希類型數據

 // hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("key_1", "name", "lsm");hashOperations.put("key_1", "age", "20");hashOperations.put("key_1", "sex", "男");String name = (String) hashOperations.get("key_1", "name");System.out.println("name: " + name); // name: lsmLong delete = hashOperations.delete("key_1", "sex");System.out.println("delete: " + delete); // delete: 1Set key_1 = hashOperations.keys("key_1");System.out.println("key_1: " + key_1); // key_1: [name, age]List key_2 = hashOperations.values("key_1");System.out.println("key_2: " + key_2);  // key_2: [lsm, 20]}

4). 操作集合類型數據

@Testpublic void testRedisSet() {// sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1", "a", "b", "c", "d");setOperations.add("set1", "e");Set set1 = setOperations.members("set1");System.out.println("set1: " + set1);  // set1: [a, d, c, b, e]Long size = setOperations.size("set1");System.out.println("size: " + size); // size = 5setOperations.remove("set1", "e");setOperations.add("set2", "a", "b", "x", "y");Set intersect = setOperations.intersect("set1", "set2");System.out.println("intersect: " + intersect);  // intersect: [a, b]Set union = setOperations.union("set1", "set2");System.out.println("union: " + union);  // union: [a, x, b, d, y, c]}

5). 操作有序集合類型數據

@Testpublic void testRedisZset() {// zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset", "a", 10);zSetOperations.add("zset", "b", 15);zSetOperations.add("zset", "c", 12);Set zset1 = zSetOperations.range("zset", 0, -1);System.out.println("zset1: " + zset1); // zset1: [a, c, b]zSetOperations.incrementScore("zset", "c", 10);zSetOperations.remove("zset", "a", "b");}

6). 通用命令操作

// keys exists type delSet keys = redisTemplate.keys("*");System.out.println("keys: " + keys);  // keys: [list, key_1, set1, zset, set2]Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println("name: " + name);  // name: falseSystem.out.println("set1: " + set1);  // set1: truefor(Object key : keys){DataType type = redisTemplate.type(key);System.out.println(type);}redisTemplate.delete("list");}

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

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

相關文章

關于Axios接口請求超時處理與重試的方法教程

在前端開發中&#xff0c;使用Axios作為HTTP客戶端庫進行接口請求是非常常見的做法。然而&#xff0c;在實際開發中&#xff0c;我們經常會遇到網絡不穩定或服務器響應緩慢導致接口請求超時的情況。為了提高用戶體驗和程序的穩定性&#xff0c;我們需要實現接口請求超時的處理與…

UnityAPI的學習——Transform類

Transform類繼承自Component類&#xff0c;并實現了IEnumberable接口。Transform是GameObject必須擁有得一個組件&#xff0c;用來管理所在GameObject對象的坐標位置、選擇角度、和大小縮放。 Transform實現了IEnumberable接口&#xff0c;因此可以在程序中使用foreach()方法快…

echarts vue 動畫效果的水球圖、波浪圖教程

1、安裝插件 前提是已經安裝了echarts&#xff08;我的版本是4.2.1&#xff09; npm install echarts-liquidfill --save 我安裝了3.1.0版本的&#xff0c;結果運行時報錯"TypeError: wave.ensureState is not a function" 原因&#xff1a;echarts版本和echarts-l…

miniconda3徹底刪除虛擬環境

退出虛擬環境&#xff1a;確保您不在要刪除的虛擬環境中。如果在&#xff0c;使用命令 conda deactivate 來退出當前激活的虛擬環境。查看虛擬環境列表&#xff1a;運行命令 conda env list 或 conda info -e 來查看所有存在的虛擬環境及其路徑。刪除虛擬環境&#xff1a;使用命…

在VMware中安裝CentOS 7并配置Docker

VMware安裝CentOS 7 一、介紹 該文章介紹如何使用啟動U盤在虛擬機里面安裝系統&#xff0c;虛擬機版本為VMware Workstation 16 pro&#xff0c;Linux版本為CentOS Linux release 7.9.2009 (Core)。 二、安裝 1、創建虛擬機 點擊創建新的虛擬機 選擇典型就可以了&#xf…

前綴和算法題(區間次方和、小藍平衡和、大石頭的搬運工、最大數組和)

一、前綴和的原理和特點 prefix表示前綴和&#xff0c;前綴和由一個用戶輸入的數組生成。對于一個數組a[]&#xff08;下標從1開始&#xff09;&#xff0c;我們定義一個前綴和數組prefix[]&#xff0c;滿足&#xff1a; prefix有一個重要的特性&#xff0c;可以用于快速生成p…

WordPress建站入門教程:如何安裝本地WordPress網站運行環境?

有些站長想要搭建WordPress網站&#xff0c;又擔心自己玩不轉&#xff0c;白白浪費購買域名和主機空間的費用。像這種情況&#xff0c;最好的做法就是在自己電腦上安裝一個WordPress網站運行環境&#xff0c;然后在本地電腦搭建WordPress&#xff0c;等熟悉掌握后再考慮購買域名…

設計模式學習筆記——抽象工廠模式

設計模式&#xff08;創建型&#xff09;—— 抽象工廠模式 在工廠模式中&#xff0c;我們為每一個類都設計了一個工廠&#xff0c;以此來獲取該類的對象&#xff0c;但缺點就是一旦類多了&#xff0c;工廠就多了&#xff0c;這時候我們可以考慮這些類間是否有關聯&#xff0c…

多輸入多輸出 | MATLAB實現GWO-Elman灰狼優化循環神經網絡多輸入多輸出預測

多輸入多輸出 | MATLAB實現GWO-Elman灰狼優化循環神經網絡多輸入多輸出預測 目錄 多輸入多輸出 | MATLAB實現GWO-Elman灰狼優化循環神經網絡多輸入多輸出預測預測效果基本介紹程序設計往期精彩參考資料 預測效果 基本介紹 Matlab實現GWO-Elman灰狼優化循環神經網絡多輸入多輸出…

kernel bypass 是什么?

文章目錄 一、kernel bypass 是什么二、Kernel Bypass技術優缺點三、Kernel Bypass技術應用領域四、Kernel Bypass的實現方式 一、kernel bypass 是什么 Kernel Bypass是一種技術&#xff0c;旨在通過繞過操作系統核來提高網絡數據包處理的性能和降低延遲。它的主要優點是高性能…

[LeetBook]【學習日記】有序鏈表合并

21. 合并兩個有序鏈表 將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例 1&#xff1a; 輸入&#xff1a;l1 [1,2,4], l2 [1,3,4] 輸出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 輸入&#xff1a;l1 [], l2 [] …

如何在電腦上中恢復已刪除的視頻

您可以在電腦中恢復已刪除的視頻&#xff0c;無需任何繁瑣的工作。您所需要做的就是閱讀本文&#xff0c;了解恢復已刪除視頻的最佳方法。 一次錯誤的點擊可能會奪走您以視頻形式存儲的寶貴記憶。嗯&#xff0c;有些視頻不適合刪除&#xff0c;您希望永遠保留它們。失去這些寶…

如何使用Docker搭建StackEdit編輯器并結合內網穿透實現遠程辦公

文章目錄 前言1. ubuntu安裝VNC2. 設置vnc開機啟動3. windows 安裝VNC viewer連接工具4. 內網穿透4.1 安裝cpolar【支持使用一鍵腳本命令安裝】4.2 創建隧道映射4.3 測試公網遠程訪問 5. 配置固定TCP地址5.1 保留一個固定的公網TCP端口地址5.2 配置固定公網TCP端口地址5.3 測試…

優選算法|【雙指針】|1089.復寫零

目錄 題目描述 題目解析 算法原理講解 代碼 題目描述 1089. 復寫零 給你一個長度固定的整數數組 arr &#xff0c;請你將該數組中出現的每個零都復寫一遍&#xff0c;并將其余的元素向右平移。 注意&#xff1a;請不要在超過該數組長度的位置寫入元素。請對輸入的數組 就…

LeetCode受限條件下可到達節點的數目

題目描述 現有一棵由 n 個節點組成的無向樹&#xff0c;節點編號從 0 到 n - 1 &#xff0c;共有 n - 1 條邊。 給你一個二維整數數組 edges &#xff0c;長度為 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示樹中節點 ai 和 bi 之間存在一條邊。另給你一個整數數組 restr…

OJ:移除鏈表元素

203. 移除鏈表元素 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;這個題可以直接在原鏈表上進行修改&#xff0c;但是修改鏈表的指向是有點麻煩的&#xff0c;所以我們給兩個指針&#xff0c;phead和ptail,這是新鏈表的兩個指針&#xff0c;再給一個指針pcur來遍歷…

Java和JavaScript區別

1. Java和javaScript都是面向對象語言 2. 他兩除了名字相似之外沒有任何關系 3. Java是一種真正的面向對象語言&#xff0c;不管開發什么程序都要設計對象&#xff1b;而JavaScript是種腳本語言&#xff0c;主要實現前端頁面的交互&#xff0c;比如驗證表單&#xff0c;彈窗提…

Sqli-labs靶場第12關詳解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post傳參了 根據題目看&#xff0c;像一個登錄頁面&#xff0c;嘗試使用布爾型盲注測試能否登錄網站 1. Username輸入a a" 測試是否會有報錯&#xff0c;burp抓包 報錯&#xff1a;syntax to use near "a"") and passw…

消息中間件之RocketMQ源碼分析(二十七)

Broker提交或回滾事務消息 當生產者本地事務處理完成并且Broker回查事務消息后&#xff0c;不管執行Commit還是Rollback,都會根據用戶本地事務的執行結果發送一個End_transaction的RPC請求給Broker&#xff0c;Broker端處理該請求的類是EndTransactionProcessor 第一步&…

volatile 關鍵字 (一)

volatile 關鍵字 &#xff08;一&#xff09; 文章目錄 volatile 關鍵字 &#xff08;一&#xff09;如何保證變量的可見性&#xff1f;如何禁止指令重排序&#xff1f; 文章來自Java Guide 用于學習如有侵權&#xff0c;立即刪除 如何保證變量的可見性&#xff1f; 在 Java 中…