1. 程式人生 > >SpringBoot(十一): Spring Boot集成Redis

SpringBoot(十一): Spring Boot集成Redis

分享 點擊 自動配置 ica 個數 行程 哨兵模式 pen syn

1、在 pom.xml 中配置相關的 jar 依賴;

<!--  加載 spring  boot  redis 包  -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

技術分享圖片

2、在 Springboot 核心配置文件 application.properties 中配置

#配置redis
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379

3、配置了上面的步驟,Spring boot 將自動配置 RedisTemplate,在需要操作 redis 的類中註入 redisTemplate; 在使用的類中註入:

@Autowired

private RedisTemplate<String, String> redisTemplate;

@Autowired

private RedisTemplate<Object, Object> redisTemplate;

spring boot 幫我們註入的 redisTemplate 類,泛型裏面只能寫<String, String>、<Object, Object>

復用上一章集成mybatis的代碼

技術分享圖片

啟動測試發現報錯,讓你後將對對象序列化

技術分享圖片

技術分享圖片

生成序列化ID方法如下:

技術分享圖片

技術分享圖片

技術分享圖片

點擊即可生成,或者使用快捷鍵Alt+Enter

5-2 Spring Boot 集成 Redis 測試啟動程序,進行訪問測試;

設置 key 的序列化方式為字符串,增強 key 的可讀性;

技術分享圖片

訪問Controller

技術分享圖片

查看redis

技術分享圖片

5-3

高並發條件下緩存穿透問題分析

在項目中使用緩存通常是先檢查緩存中是否存在,如果存在直接返回緩存內容,如果不存在就直接查詢數據庫,然後將查詢出來的數據緩

存到緩存中,最終返回查詢結果; 但是如果大量用戶請求查詢的某一個數據,而該數據在緩存中不存

在,就會造成大量的用戶請求都去查詢 DB,這樣緩存就失去了意義,在並發流量大時,可能導致 DB 壓力過大而失去響應;

5-4 高並發條件下緩存穿透問題復現

按照常規的代碼實現方式,多線程並發條件下多個請求落入到了數據庫;

5-5 高並發條件下緩存穿透問題處理

通過鎖機制,避免請求穿透緩存直接落入到數據庫;

解決方式一: 加synchronized 但是這樣會導致效率很低,不推薦使用!

技術分享圖片

解決方法二:雙重檢測機制 (如果集群的項目,可以了解一下分布式鎖)

技術分享圖片

5-6 高並發條件下緩存穿透問題測試

運行程序,觀察是否有多個請求落入到數據庫;

Redis 哨兵模式待更新

SpringBoot(十一): Spring Boot集成Redis