Hi~!這里是奮斗的明志,很榮幸您能閱讀我的文章,誠請評論指點,歡迎歡迎 ~~
🌱🌱個人主頁:奮斗的明志
🌱🌱所屬專欄:Redis
📚本系列文章為個人學習筆記,在這里撰寫成文一為鞏固知識,二為展示我的學習過程及理解。文筆、排版拙劣,望見諒。
Redis Java 集成到 Spring Boot
- 一、使用 Spring Boot 連接 Redis 單機
- 1.創建Spring Boot 項目
- 2.勾選相關依賴(Dependencies)
- 3.界面顯示
- 二、配置 Redis 服務地址
- 1.在 application.yml 中配置
- 2.映射端口號
- 三、創建 Controller 類
- 1.創建一個 MyController
- 2.使用 String
- 3.使用 List
- 4.使用 Set
- 5.使用 Hash
- 6.使用 ZSet
- 四、小結
一、使用 Spring Boot 連接 Redis 單機
1.創建Spring Boot 項目
2.勾選相關依賴(Dependencies)
- NoSQL 中的 Spring Data Redis
- 把 Web 中的 Spring Web 也勾選?下.
- 方便寫接口進行后續測試.
3.界面顯示
二、配置 Redis 服務地址
1.在 application.yml 中配置
spring:data:redis:host: 127.0.0.1 # 地址port: 8888 # 映射的端口號
補充:
Spring Boot 1.x 和 Spring Boot 2.x 中,spring.redis.host 用于配置 Redis 連接屬性。
Spring Boot 3.x 中,spring.redis.host 已經棄用。
從 Spring Boot 2.x 開始,引入了 spring.data.redis 作為配置 Redis 連接的方式,并且在 Spring Boot 3.x 中也可以使用 spring.data.redis 進行配置。
2.映射端口號
- 用Shell8 進行配置,需要一個公網ip
三、創建 Controller 類
1.創建一個 MyController
由于當前只是寫簡單的測試代碼, 我們就不進?分層了. 就只創建個簡單的 Controller 即可.
@RestController
public class MyController {@Autowiredprivate StringRedisTemplate redisTemplate;
}
StringRedisTemplate 用來處理文本數據的
繼承于RedisTemplate
RedisTemplate 可以處理文本數據也可以處理二進制數據
2.使用 String
@GetMapping("/testString")
@ResponseBody
public String testString() {//先清除之前的數據庫redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});//對原生 redis 又做了進一步封裝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";
}
- 該代碼片段是一個 Spring Boot 控制器方法,通過 RedisTemplate 與 Redis 進行交互,并進行一些基本的操作
redisTemplate.execute((RedisConnection connection) -> { ... })
:這行代碼調用了RedisTemplate
的execute
方法,執行一個Redis
操作。具體來說,connection.flushAll()
會清空 Redis 中的所有數據(即調用FLUSHALL
命令)。execute
方法通過Lambda
表達式傳遞了一個Redis
連接對象,用來執行Redis
命令。執行完flushAll
后,Redis
中的所有數據
會被刪除。redisTemplate.opsForValue()
相當于對命令進行進一步的封裝,用它可以調用相關方法。
- 客戶端發送請求(返回OK)表明已經成功
- 打印日志
3.使用 List
@GetMapping("/testList")
@ResponseBody
public String testList() {//先清除之前的數據庫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";
}
- 客戶端發送請求(返回OK)表明已經成功
- 打印日志
4.使用 Set
@GetMapping("/testSet")
@ResponseBody
public String testSet() {//先清除之前的數據庫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";
}
- 客戶端發送請求(返回OK)表明已經成功
- 打印日志
5.使用 Hash
@GetMapping("/testHash")
@ResponseBody
public String testHash() {//先清除之前的數據庫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";
}
- 客戶端發送請求(返回OK)表明已經成功
- 打印日志
6.使用 ZSet
@GetMapping("/testZSet")
@ResponseBody
public String testZSet() {//先清除之前的數據庫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";}
- 客戶端發送請求(返回OK)表明已經成功
- 打印日志
四、小結
- 對于
Jedis
來說, 各個方法和Redis
的命令基本是一致的. - 而集成到
Spring Boot
之后, 接口上和原始Redis
命令存在部分差別, 但是使用起來也并不困難, 只要大家熟悉Redis
的基本操作, 還是很容易可以通過方法名字理解用法的.