溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot緩存之redis整合的方法

發布時間:2022-04-02 16:05:39 來源:億速云 閱讀:252 作者:iii 欄目:移動開發

今天小編給大家分享一下springboot緩存之redis整合的方法的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    默認使用的是ConcurrentMapCacheManager的ConcurrentMapCache作為緩存組件。

    使用ConcurrentMap的時候,是將數據保存在ConcurrentMap<Object,Object>當中的。

    實際在開發過程中,我們經常使用的,是一些緩存中間件的。

    比如我們經常使用的redis,memcache,包括我們使用的ehcache,等等,我們都是使用一些緩存中間件。

    我們之前講解原理的時候,也發現了,springboot是支持很多的緩存配置的:

    如下圖所示的:

    springboot緩存之redis整合的方法

    默認開始的配置的是:SimpleCacheConfiguration。

    其他的緩存是在什么時候開啟呢?

    我們可以ctrl+n搜索一下,這些配置類,然后進去看看他們的conditional條件:

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這些都是表示,當你導入了相應的包的時候,這些配置才會是生效的哦。

    整合redis作為緩存

    如果有不會redis這個技術的同學,尚硅谷當中有周陽老師發布的redis系列的講解視頻?;蛘叽蠹铱梢宰羁斓卦L問redis的官方網站,來進行學習,redis.cn是redis學習的中文網。

    安裝redis

    搜索redis鏡像

    springboot緩存之redis整合的方法

    這個是連接國外的倉庫,速度是比較慢的。

    我們推薦使用docker 中國。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    docker pull registry.docker-cn.com/library/redis

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    啟動redis鏡像

    docker run -d -p 6379:6379 --name myredis [REPOSITORY]
    docker ps

    為了測試,打開redis的連接工具。

    redis desktop manager

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    測試redis常用的數據操作

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis操作list

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis的set操作

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    引入redis的starter

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    配置redis

    springboot緩存之redis整合的方法

    簡單說下redis原理

    我們引入了redis的starter之后,redisAutoConfiguration就起作用了。

    springboot緩存之redis整合的方法

    這個RedisAutoConfiguration是給容器當中加入了兩個組件:

    springboot緩存之redis整合的方法

    給容器中加入的組件,一個是叫做RedisTemplate,一個是叫做StringRedisTemplate,兩個東西。

    這兩個東西就是用來操作redis的。

    這就跟大家以前用的jdbcTemplate一樣,用來操作數據庫的東西。

    這就是spring用來簡化操作redis的兩個template,如果在程序當中想要用這兩個東西,就自動注入就可以了。

    springboot緩存之redis整合的方法

    redis測試

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis操作list:

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis測試保存對象

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這些看不懂的玩意,全部都是序列化的結果。

    redisTemplate默認的序列化規則

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    默認的序列化器,就是使用的JdkSerializationRedisSerializer。

    默認的序列化器,就是使用的JDK的序列化器。

    我們來切換成json的序列化器,就可以了。

    redis配置

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    在測試類當中,自動注入我們自己配置的redisTemplate。

    springboot緩存之redis整合的方法

    然后我們再次測試保存對象。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這就說明了,我們的序列化器修改成功了。

    這就說明白了,如果我們后面要保存對象的時候,我們經常是要修改序列化器的。

    springboot緩存之redis整合的方法

    測試緩存

    springboot緩存之redis整合的方法

    我們之前使用的是ConCurrentMap的緩存管理器的。
    這個緩存管理器,幫我們來創建出來緩存組件的。
    緩存組件來實際給緩存中,進行CRUD的工作的。

    現在我們引入了redis之后,會發生什么樣的效果呢?
    我們還是在application.properties當中將debug=true,這樣就可以將自動配置報告來打開。
    這樣的時候,我們重新啟動我們的程序,在控制臺當中,我們去搜索一下。
    看看是哪一個自動配置類,是生效的呢?

    springboot緩存之redis整合的方法

    原來默認開啟的是:SimpleCacheConfiguration的。

    現在我們引入了redis相關的starters之后,程序默認開啟的是RedisCacheConfiguration了。

    springboot緩存之redis整合的方法

    啟動程序,直接進行測試就可以了。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    說明第一次查詢的時候,是查詢數據庫了。

    第二次查詢的時候,控制臺是沒有任何輸出的,說明是查詢了緩存了。

    緩存默認是只有redis開啟的。

    那么肯定是在redis當中了。

    我們可以查看一下:

    springboot緩存之redis整合的方法

    這個說明一個問題,在k和v都是object的時候,默認保存對象的時候,利用序列化來保存的。我們是想要讓redis自動保存為json的。

    我們應該怎么做呢?

    我們先來分析一下這些過程當中的原理。

    1、我們是引入了redis的starter,所以我們的cachemanager變為了rediscachemanager了,

    2、默認創建的rediscachemanager在操作我們的數據的時候,傳入了一個redistemplate的東西。

    springboot緩存之redis整合的方法

    3、這個redistemplate是redisautoconfiguration幫我們創建的。這個redistemplate默認使用的序列化機制是jdkserializationredisserializer的。這個就是相當于,redis默認給我們防止的redisCacheManager還不太符合我們的要求的。

    我們怎么辦呢?

    我們應該自定義CacheManager的。

    自定義redisCacheManager

    springboot緩存之redis整合的方法

    這個時候,我們再啟動項目,來進行測試,這個時候,我們就可以看到redis當中的結果,是我們想要的了。

    springboot緩存之redis整合的方法

    韞秋下次面試的時候,就可以問那些想要來軟件園的人,說,你知道redis starter保存對象的時候,redisTemplate默認的序列化規則是什么嗎?

    如果我們在使用redis的過程中,我們想要修改默認的序列化規則,我們應該怎么做呢?

    我們可以自定義redisCacheManager,然后自定義redisTemplate,在redisTemplate當中傳入json相關的序列化器的哦。

    springboot緩存之redis整合的方法

    遺留的小問題

    數據庫

    我們在數據庫當中的,department表當中,放進去一條數據:

    springboot緩存之redis整合的方法

    mapper

    我們寫一個對應的department操作的mapper。

    springboot緩存之redis整合的方法

    service

    我們再寫一個對應的service

    springboot緩存之redis整合的方法

    controller

    springboot緩存之redis整合的方法

    啟動項目測試

    springboot緩存之redis整合的方法

    然后我們看看redis當中,是否是有數據的呢?

    springboot緩存之redis整合的方法

    我們看了,redis當中dept相關的數據,是有的。

    我們第二次來查詢dept的時候,就應該走緩存redis了。

    但是我們第二次去查詢的,時候,出現了下面的錯誤。

    錯誤

    springboot緩存之redis整合的方法

    上面報錯的意思就是說,不能夠去讀取json的。

    因為是要把部門的json對象,轉換成為員工的json對象,這是不可以的。

    這個就是因為,我們放置的redisCacheManager是操作員工的。

    springboot緩存之redis整合的方法

    所以,現在我們看到的這個效果,就是很神奇的哦。

    緩存的數據,能夠存入到redis當中。

    但是我們第二次從緩存中查詢的時候,就不能夠反序列化回來了。

    原來就是,我們存的是dept的json的數據,我們的cachemanager,默認是用employee的template來操作redis的。

    這個東西只能夠將employee的數據反序列化過來的。

    解決錯誤

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這個時候,就等于有了2個redisCacheManager了,我們用哪個呢?

    我們在service當中,是可以指定的。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    然后我們重啟項目,結果是報錯了:

    springboot緩存之redis整合的方法

    如果,我們是有多個cacheManager的話,我們一定是要把某一個cacheManager作為,我們的默認配置的緩存管理器的。

    比如,我們可以進行下面的操作,來修復這個啟動報錯的內容的呢:

    springboot緩存之redis整合的方法

    重新啟動進行項目測試

    這個時候,看看,我們在進行第二次部門查詢的時候,能不能夠正常地,成功地,從redis當中反序列化地讀取到,我們的部門信息呢?

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這個時候,我們就發現,不管是員工還是部門,我們都是可以從redis當中反序列化成功查詢的。

    這個就是很完美的啦。

    編碼的方式操作緩存

    前面我們說的,全部都是使用注解的方式,來給緩存當中,來放置數據的。

    但是,在開發當中,我們經常會,遇到這樣的情況。

    就是,我們開發進行到某個階段,我們是需要將一些數據,放到緩存當中的。

    我們是需要,使用編碼的方式,來操作緩存的。

    比如我們在查詢出來了部門的信息之后,就希望把這個信息,放入到redis當中。

    我們可以把部門的cacheManager注入進來。

    springboot緩存之redis整合的方法

    然后我們在編碼的過程中,可以通過操作這個cacheManager來獲取緩存,

    然后,再操作緩存組件,來對數據進行增刪改查。

    springboot緩存之redis整合的方法

    我們對上面的代碼,啟動項目進行測試,發現是可以的,是成功地給redis當中放進去了數據的:

    springboot緩存之redis整合的方法

    以上就是“springboot緩存之redis整合的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女