Redis Java 集成到 Spring Boot的詳細(xì)過(guò)程
一、使用 Spring Boot 連接 Redis 單機(jī)
1.創(chuàng)建Spring Boot 項(xiàng)目

2.勾選相關(guān)依賴(lài)(Dependencies)
- NoSQL 中的 Spring Data Redis
- 把 Web 中的 Spring Web 也勾選?下.
- 方便寫(xiě)接口進(jìn)行后續(xù)測(cè)試.


3.界面顯示

二、配置 Redis 服務(wù)地址
1.在 application.yml 中配置
spring:
data:
redis:
host: 127.0.0.1 # 地址
port: 8888 # 映射的端口號(hào)補(bǔ)充:
Spring Boot 1.x 和 Spring Boot 2.x 中,spring.redis.host 用于配置 Redis 連接屬性。
Spring Boot 3.x 中,spring.redis.host 已經(jīng)棄用。
從 Spring Boot 2.x 開(kāi)始,引入了 spring.data.redis 作為配置 Redis 連接的方式,并且在 Spring Boot 3.x 中也可以使用 spring.data.redis 進(jìn)行配置。
2.映射端口號(hào)
用Shell8 進(jìn)行配置,需要一個(gè)公網(wǎng)ip

三、創(chuàng)建 Controller 類(lèi)
1.創(chuàng)建一個(gè) MyController
由于當(dāng)前只是寫(xiě)簡(jiǎn)單的測(cè)試代碼, 我們就不進(jìn)?分層了. 就只創(chuàng)建個(gè)簡(jiǎn)單的 Controller 即可.

@RestController
public class MyController {
@Autowired
private StringRedisTemplate redisTemplate;
}StringRedisTemplate 用來(lái)處理文本數(shù)據(jù)的
繼承于RedisTemplate
RedisTemplate 可以處理文本數(shù)據(jù)也可以處理二進(jìn)制數(shù)據(jù)

2.使用 String
@GetMapping("/testString")
@ResponseBody
public String testString() {
//先清除之前的數(shù)據(jù)庫(kù)
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
//對(duì)原生 redis 又做了進(jìn)一步封裝
redisTemplate.opsForValue().set("key", "111");
redisTemplate.opsForValue().set("key2", "222");
redisTemplate.opsForValue().set("key3", "333");
String value = redisTemplate.opsForValue().get("key");
System.out.println("value:" + value);
return "OK";
}- 該代碼片段是一個(gè) Spring Boot 控制器方法,通過(guò) RedisTemplate 與 Redis 進(jìn)行交互,并進(jìn)行一些基本的操作
redisTemplate.execute((RedisConnection connection) -> { ... }):這行代碼調(diào)用了 RedisTemplate的execute方法,執(zhí)行一個(gè)Redis操作。具體來(lái)說(shuō),connection.flushAll()會(huì)清空 Redis 中的所有數(shù)據(jù)(即調(diào)用FLUSHALL命令)。execute方法通過(guò)Lambda表達(dá)式傳遞了一個(gè)Redis連接對(duì)象,用來(lái)執(zhí)行Redis命令。執(zhí)行完flushAll后,Redis中的所有數(shù)據(jù)會(huì)被刪除。redisTemplate.opsForValue()相當(dāng)于對(duì)命令進(jìn)行進(jìn)一步的封裝,用它可以調(diào)用相關(guān)方法。
客戶(hù)端發(fā)送請(qǐng)求(返回OK)表明已經(jīng)成功

打印日志

3.使用 List
@GetMapping("/testList")
@ResponseBody
public String testList() {
//先清除之前的數(shù)據(jù)庫(kù)
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForList().leftPush("key", "111");
redisTemplate.opsForList().leftPush("key", "222");
redisTemplate.opsForList().leftPush("key", "333");
String value = redisTemplate.opsForList().leftPop("key");
System.out.println("value: " + value);
value = redisTemplate.opsForList().leftPop("key");
System.out.println("value: " + value);
value = redisTemplate.opsForList().leftPop("key");
System.out.println("value: " + value);
return "OK";
}客戶(hù)端發(fā)送請(qǐng)求(返回OK)表明已經(jīng)成功

打印日志

4.使用 Set
@GetMapping("/testSet")
@ResponseBody
public String testSet() {
//先清除之前的數(shù)據(jù)庫(kù)
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForSet().add("key", "111", "222", "333");
Set<String> result = redisTemplate.opsForSet().members("key");
System.out.println("result: " + result);
Boolean exists = redisTemplate.opsForSet().isMember("key", "111");
System.out.println("existe: " + exists);
Long count = redisTemplate.opsForSet().size("key");
System.out.println("count: " + count);
redisTemplate.opsForSet().remove("key", "111", "222");
result = redisTemplate.opsForSet().members("key");
System.out.println("result: " + result);
return "OK";
}客戶(hù)端發(fā)送請(qǐng)求(返回OK)表明已經(jīng)成功

打印日志

5.使用 Hash
@GetMapping("/testHash")
@ResponseBody
public String testHash() {
//先清除之前的數(shù)據(jù)庫(kù)
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForHash().put("key", "f1", "111");
Map<String, String> map = new HashMap<>();
map.put("f2", "222");
map.put("f3", "333");
redisTemplate.opsForHash().putAll("key", map);
String value = (String) redisTemplate.opsForHash().get("key", "f1");
System.out.println("value: " + value);
Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1");
System.out.println("exists: " + exists);
redisTemplate.opsForHash().delete("key", "f1", "f2");
Long len = redisTemplate.opsForHash().size("key");
System.out.println("len: " + len);
return "OK";
}客戶(hù)端發(fā)送請(qǐng)求(返回OK)表明已經(jīng)成功

打印日志

6.使用 ZSet
@GetMapping("/testZSet")
@ResponseBody
public String testZSet() {
//先清除之前的數(shù)據(jù)庫(kù)
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForZSet().add("key", "zhangsan", 10);
redisTemplate.opsForZSet().add("key", "lisi", 20);
redisTemplate.opsForZSet().add("key", "wangwu", 30);
Set<String> members = redisTemplate.opsForZSet().range("key", 0, -1);
System.out.println("members: " + members);
Set<ZSetOperations.TypedTuple<String>> membersWithScores = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
System.out.println("membersWithScores: " + membersWithScores);
Double score = redisTemplate.opsForZSet().score("key", "zhangsan");
System.out.println("score: " + score);
redisTemplate.opsForZSet().remove("key", "zhangsan");
Long size = redisTemplate.opsForZSet().size("key");
System.out.println("size: " + size);
Long rank = redisTemplate.opsForZSet().rank("key", "lisi");
System.out.println("rank: " + rank);
return "OK";
}客戶(hù)端發(fā)送請(qǐng)求(返回OK)表明已經(jīng)成功

打印日志

四、小結(jié)
- 對(duì)于
Jedis來(lái)說(shuō), 各個(gè)方法和Redis的命令基本是一致的. - 而集成到
Spring Boot之后, 接口上和原始Redis命令存在部分差別, 但是使用起來(lái)也并不困難, 只要大家熟悉Redis的基本操作, 還是很容易可以通過(guò)方法名字理解用法的.
到此這篇關(guān)于Redis Java 集成到 Spring Boot的文章就介紹到這了,更多相關(guān)Redis Java 集成到 Spring Boot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud使用集中配置組件Config規(guī)避信息泄露
項(xiàng)目應(yīng)用中,數(shù)據(jù)庫(kù)連接信息、Access-key、Secret-key等由于其及其敏感和特殊性,一旦泄露出去就很可能會(huì)使得應(yīng)用遭到黑客攻擊,例如數(shù)據(jù)庫(kù)賬號(hào)密碼泄露可能導(dǎo)致“拖庫(kù)”,甚至數(shù)據(jù)丟失。此等事件偶有發(fā)生,那么,在分布式微服務(wù)項(xiàng)目中,怎么避免這種情況呢2022-07-07
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之KMP算法
在很多地方也都經(jīng)??吹街v解KMP算法的文章,看久了好像也知道是怎么一回事,但總感覺(jué)有些地方自己還是沒(méi)有完全懂明白。這兩天花了點(diǎn)時(shí)間總結(jié)一下,有點(diǎn)小體會(huì),我希望可以通過(guò)我自己的語(yǔ)言來(lái)把這個(gè)算法的一些細(xì)節(jié)梳理清楚,也算是考驗(yàn)一下自己有真正理解這個(gè)算法2022-02-02
Java實(shí)現(xiàn)的簡(jiǎn)單畫(huà)圖板示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單畫(huà)圖板,涉及java使用swing組件進(jìn)行圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
SpringSecurity自定義登錄接口的實(shí)現(xiàn)
本文介紹了使用Spring Security實(shí)現(xiàn)自定義登錄接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Jenkins遷移job插件Job Import Plugin流程詳解
這篇文章主要介紹了Jenkins遷移job插件Job Import Plugin流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
簡(jiǎn)單了解Spring Framework5.0新特性
這篇文章主要介紹了簡(jiǎn)單了解Spring Framework5.0新特性,涉及了核心框架修訂,核心容器更新,使用Kotlin進(jìn)行函數(shù)式編程等幾個(gè)方面的介紹,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

