spring-boot-2.0.3之redis緩存實現
目錄
- 前言
- springboot1.5.9緩存配置
- 工程實現
- redis 怎樣保存cache
- spring2.0.3緩存配置
- 工程實現
- redis 怎樣保存cache
- 總結
- 參考
回到頂部
前言
開心一刻
小白問小明:「你前面有一個5米深的坑,裡面沒有水,如果你跳進去後該怎樣出來了?」小明:「躺著出來唄,還能怎麼出來?」小白:「為什麼躺著出來?」小明:「5米深的坑,還沒有水,跳下去不死就很幸運了,殘是肯定會殘的,不躺著出來,那能怎麼出來?」小白:「假設沒死也沒殘呢?」小明:「你當我超人了? 那也簡單,把腦子裡的水放出來就可以漂出來了。」小白:「你腦子裡有這麼多水嗎?」小明:「我腦子裡沒那麼多水我跳下去幹嘛?」
路漫漫其修遠兮,吾將上下而求索!
github:https://github.com/youzhibing
碼雲(gitee):https://gitee.com/youzhibing
springboot 1.x到2.x變動的內容還是挺多的,而2.x之間也存在細微的差別,本文不講這些差別(具體差別我也不知道,汗......),只講1.5.9與2.0.3的redis緩存配置的區別
回到頂部
springboot1.5.9緩存配置
工程實現
1.x系列配置應該都差不多,下面我們看看1.5.9中,springboot集成redis的緩存實現
pom.xml
打開今日頭條,查看更多精彩圖片
View Code
application.yml
View Code
RedisCacheConfig.java
View Code
CacheServiceImpl.java
View Code
上述只講了幾個主要的文件,更多詳情請點springboot159-cache
redis 怎樣保存cache
大家一定要把工程仔細看一遍,不然下面出現的一些名稱會讓我們感覺不知從哪來的;
工程中的緩存分兩種:緩存管理器管理的緩存(也就是一些列註解實現的緩存)、redisTemplate操作的緩存
緩存管理器管理的緩存
會在redis中增加2條數據,一個是類型為 zset 的 緩存名~keys , 裡面存放了該緩存所有的key, 另一個是對應的key,值為序列化後的json;緩存名~keys可以理解成緩存空間,與我們平時所說的具體的緩存是不一樣的。另外對緩存管理器的一些設置(全局過期時間等)都會反映到緩存管理器管理的所有緩存上;上圖中的http://localhost:8888/getName和http://localhost:8888/listUser?pageNum=1&pageSize=3對應的是緩存管理器管理的緩存。
redisTemplate操作的緩存
會在redis中增加1條記錄,key - value鍵值對,與我們通過redis-cli操作緩存一樣;上圖中的http://localhost:8888/getUserName對應的是redisTemplate操作的緩存。
回到頂部
spring2.0.3緩存配置
工程實現
pom.xml
View Code
application.yml
View Code
緩存定製:RedisCacheManagerConfig.java
View Code
此類可不用配置,就用spring-boot自動配置的緩存管理器也行,只是在緩存的可閱讀性上會差一些。有興趣的朋友可以刪除此類試試。
CacheServiceImpl.java
View Code
更多詳情請點spring-boot-cache
redis 怎樣保存cache
我們來看圖說話,看看緩存在redis中是如何保存的
工程中的緩存分兩種:緩存管理器管理的緩存(也就是一些列註解實現的緩存)、redisTemplate操作的緩存
緩存管理器管理的緩存
會在redis中增加1條數據,key是以緩存空間開頭的字元串(緩存空間名::緩存key),值為序列化後的json;上圖中的http://localhost:8889/getName和http://localhost:8889/listUser?pageNum=1&pageSize=3對應的是緩存管理器管理的緩存。
redisTemplate操作的緩存
會在redis中增加1條記錄,key - value鍵值對,與我們通過redis-cli操作緩存一樣;上圖中的http://localhost:8889/getUserName對應的是redisTemplate操作的緩存。
回到頂部
總結
1、有時候我們引入spring-boot-starter-cache這個starter只是為了快速添加緩存依賴,目的是引入spring-context-support;如果我們的應用中中已經有了spring-context-support,那麼我們無需再引入spring-boot-starter-cache,例如我們的應用中依賴了spring-boot-starter-web,而spring-boot-starter-web中又有spring-context-support依賴,所以我們無需再引入spring-boot-starter-cache。
2、Supported Cache Providers,講了支持的緩存類型以及默認情況下的緩存載入方式,可以通讀下。
3、只要我們引入了redis依賴,並將redis的連接信息配置正確,springboot(2.0.3)根據我們的配置會給我們生成默認的緩存管理器和redisTemplate;我們也可以自定義我們自己的緩存管理器來替換掉默認的,只要我們自定義了緩存管理器和redisTemplate,那麼springboot的默認生成的會替換成我們自定義的。
4、緩存管理器對緩存的操作也是通過redisTemplate實現的,只是進行了統一的管理,並且能夠減少我么的代碼量,我們可以將更多的精力放到業務處理上。
5、redis-cli -h 127.0.0.1 -p 6379 -a 123456與redis-cli -a 123456兩種方式訪問到的數據完全不一致,好像操作不同的庫一樣! 這個需要注意,有空我回頭看看這兩者到底有啥區別,有知道的朋友可以留個言。
最後緬懷一下:金庸走了,再無江湖;IG捧杯了,再無LOL!感謝IG成就了我的完美謝幕,讓我的青春少了一份遺憾,謝謝!
※事務概念以及更新丟失的解決
※如何利用DeepFM演算法設計推薦系統
TAG:程序員小新人學習 |