成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 2.x基礎:使用集中式緩存Redis

存儲 存儲軟件 Redis
我們介紹了兩種進程內緩存的用法,包括Spring Boot默認使用的ConcurrentMap緩存以及緩存框架EhCache。

 我們介紹了兩種進程內緩存的用法,包括Spring Boot默認使用的ConcurrentMap緩存以及緩存框架EhCache。雖然EhCache已經能夠適用很多應用場景,但是由于EhCache是進程內的緩存框架,在集群模式下時,各應用服務器之間的緩存都是獨立的,因此在不同服務器的進程間會存在緩存不一致的情況。即使EhCache提供了集群環境下的緩存同步策略,但是同步依然是需要一定的時間,短暫的緩存不一致依然存在。

[[338584]]

在一些要求高一致性(任何數據變化都能及時的被查詢到)的系統和應用中,就不能再使用EhCache來解決了,這個時候使用集中式緩存就可以很好的解決緩存數據的一致性問題。接下來我們就來學習一下,如何在Spring Boot的緩存支持中使用Redis實現數據緩存。

動手試試

本篇的實現將基于上一篇的基礎工程來進行。先來回顧下上一篇中的程序要素:

User實體的定義

  1. @Entity 
  2. @Data 
  3. @NoArgsConstructor 
  4. public class User implements Serializable { 
  5.  
  6.     @Id 
  7.     @GeneratedValue 
  8.     private Long id; 
  9.  
  10.     private String name
  11.     private Integer age; 
  12.  
  13.     public User(String nameInteger age) { 
  14.         this.name = name
  15.         this.age = age; 
  16.     } 

User實體的數據訪問實現(涵蓋了緩存注解)

  1. @CacheConfig(cacheNames = "users"
  2. public interface UserRepository extends JpaRepository<User, Long> { 
  3.  
  4.     @Cacheable 
  5.     User findByName(String name); 
  6.  

下面開始改造這個項目:

第一步:pom.xml中增加相關依賴:

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-data-redis</artifactId> 
  4. </dependency> 
  5.  
  6. <dependency> 
  7.     <groupId>org.apache.commons</groupId> 
  8.     <artifactId>commons-pool2</artifactId> 
  9. </dependency> 

在Spring Boot 1.x的早期版本中,該依賴的名稱為spring-boot-starter-redis,所以在Spring Boot 1.x基礎教程中與這里不同。

第二步:配置文件中增加配置信息,以本地運行為例,比如:

  1. spring.redis.host=localhost 
  2. spring.redis.port=6379 
  3. spring.redis.lettuce.pool.max-idle=8 
  4. spring.redis.lettuce.pool.max-active=8 
  5. spring.redis.lettuce.pool.max-wait=-1ms 
  6. spring.redis.lettuce.pool.min-idle=0 
  7. spring.redis.lettuce.shutdown-timeout=100ms 

關于連接池的配置,注意幾點:

Redis的連接池配置在1.x版本中前綴為spring.redis.pool與Spring Boot 2.x有所不同。

在1.x版本中采用jedis作為連接池,而在2.x版本中采用了lettuce作為連接池

以上配置均為默認值,實際上生產需進一步根據部署情況與業務要求做適當修改.

再來試試單元測試:

  1. @Slf4j 
  2. @RunWith(SpringRunner.class) 
  3. @SpringBootTest 
  4. public class Chapter54ApplicationTests { 
  5.  
  6.     @Autowired 
  7.     private UserRepository userRepository; 
  8.  
  9.     @Autowired 
  10.     private CacheManager cacheManager; 
  11.  
  12.     @Test 
  13.     public void test() throws Exception { 
  14.         System.out.println("CacheManager type : " + cacheManager.getClass()); 
  15.  
  16.         // 創建1條記錄 
  17.         userRepository.save(new User("AAA", 10)); 
  18.  
  19.         User u1 = userRepository.findByName("AAA"); 
  20.         System.out.println("第一次查詢:" + u1.getAge()); 
  21.  
  22.         User u2 = userRepository.findByName("AAA"); 
  23.         System.out.println("第二次查詢:" + u2.getAge()); 
  24.     } 
  25.  

執行測試輸出可以得到:

  1. CacheManager type : class org.springframework.data.redis.cache.RedisCacheManager 
  2. Hibernate: select next_val as id_val from hibernate_sequence for update 
  3. Hibernate: update hibernate_sequence set next_val= ? where next_val=? 
  4. Hibernate: insert into user (age, name, id) values (?, ?, ?) 
  5. 2020-08-12 16:25:26.954  INFO 68282 --- [           main] io.lettuce.core.EpollProvider            : Starting without optional epoll library 
  6. 2020-08-12 16:25:26.955  INFO 68282 --- [           main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library 
  7. Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ where user0_.name=? 
  8. 第一次查詢:10 
  9. 第二次查詢:10 

可以看到:

第一行輸出的CacheManager type為org.springframework.data.redis.cache.RedisCacheManager,而不是上一篇中的EhCacheCacheManager了

第二次查詢的時候,沒有輸出SQL語句,所以是走的緩存獲取

整合成功!

思考題

既然EhCache等進程內緩存有一致性問題存在,而Redis性能好而且還能解決一致性問題,那么我們只要學會用Redis就好了咯,為什么還要學進程內緩存呢?先留下你的思考,下一篇我們一起討論這個問題!歡迎關注本系列教程:《Spring Boot 2.x基礎教程》

代碼示例

本文的相關例子可以查看下面倉庫中的chapter5-4目錄:

Github:https://github.com/dyc87112/SpringBoot-Learning/

Gitee:https://gitee.com/didispace/SpringBoot-Learning/

【本文為51CTO專欄作者“翟永超”的原創稿件,轉載請通過51CTO聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2012-02-23 23:33:37

開源memcached

2021-03-04 10:11:50

MongoDBSpring BootSpring Boot

2022-03-18 09:00:00

開發Web服務應用程序

2023-08-22 14:20:21

2021-02-03 10:49:34

JTA分布式事務

2022-03-29 14:28:03

架構安全設計

2019-11-07 11:21:21

安全軟件IT

2025-04-08 07:30:40

數據庫對象索引

2009-07-02 19:24:50

安全管理Windows審計

2012-02-21 09:59:52

2025-03-27 07:30:28

2025-04-21 07:31:21

OB單機版數據庫

2015-07-28 09:44:38

集中式云數據加密安全漏洞

2009-07-20 11:11:34

分光器FTTP

2011-10-19 13:53:11

2025-02-18 07:30:35

2022-06-29 10:19:57

VMware

2017-06-27 10:21:12

vRealize LoNSX日志管理

2014-08-05 09:15:14

SDN

2021-12-31 08:48:23

Logback日志管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级片毛片 | 欧美成人猛片aaaaaaa | www国产成人免费观看视频,深夜成人网 | 亚洲精品在线免费播放 | 欧美成人精品一区 | 91精品国产自产在线老师啪 | 亚洲精品一二三 | 91高清免费 | 99re在线视频免费观看 | 蜜桃视频成人 | 亚洲高清在线观看 | 国产日韩欧美一区二区在线播放 | 久久精品亚洲 | 久久噜噜噜精品国产亚洲综合 | 欧美精品乱码久久久久久按摩 | 免费午夜剧场 | 国产欧美一区二区三区免费 | 91成人在线视频 | 国产高清一区二区 | 人人爽日日躁夜夜躁尤物 | 欧美不卡在线 | 91精品国产91久久久久久丝袜 | 亚洲精品99 | 精品国产一区二区三区日日嗨 | jizz中国日本 | 国产精品久久久久久久久污网站 | 激情在线视频网站 | 日韩aⅴ在线观看 | 91视频网址| 99久久99热这里只有精品 | 爱草在线| 成人污污视频 | 精品在线播放 | 精品欧美乱码久久久久久1区2区 | 逼逼网 | 日日做夜夜爽毛片麻豆 | 久久国产成人 | 91亚洲国产亚洲国产 | 久草福利 | 综合激情av | 一二三在线视频 |