目錄
整合redis作為快取
安裝redis
#啟動redis映像
redis desktop manager
測試redis常用的資料操作
redis操作list
#redis的set動作
#引入redis的starter
配置redis
#簡單說下redis原理
redis測試
#redis測試保存物件
自訂redisCacheManager
遺留的小問題
資料庫
mapper
service
controller
啟動專案測試
錯誤
解決錯誤
#重新啟動進行專案測試
編碼的方式操作快取
首頁 資料庫 Redis springboot快取之redis整合的方法

springboot快取之redis整合的方法

May 30, 2023 pm 01:22 PM
redis springboot

    預設使用的是ConcurrentMapCacheManager的ConcurrentMapCache作為快取元件。

    使用ConcurrentMap的時候,是將資料保存在ConcurrentMap<object></object>當中的。

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

    例如我們常用的redis,memcache,包括我們使用的ehcache,等等,我們都是用一些快取中間件。

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

    如下圖所示的:

    springboot快取之redis整合的方法

    預設開始的設定的是:SimpleCacheConfiguration。

    其他的快取是在什麼時候開啟呢?

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

    springboot快取之redis整合的方法

    springboot快取之redis整合的方法

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

    整合redis作為快取

    如果有不會redis這個技術的同學,尚矽谷當中有周陽老師發布的redis系列的講解影片。或者大家可以最快造訪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整合的方法

    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。 ###############然後我們再次測試保存物件。 ########################這就說明了,我們的序列化器修改成功了。 ######這就說明白了,如果我們後面要保存物件的時候,我們常常是要修改序列化器的。 ###############測試快取############

    我們之前使用的是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整合的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它們
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

    Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

    redis數據怎麼清空 redis數據怎麼清空 Apr 10, 2025 pm 10:06 PM

    如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

    redis指令怎麼用 redis指令怎麼用 Apr 10, 2025 pm 08:45 PM

    使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

    redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

    Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

    redis怎麼讀源碼 redis怎麼讀源碼 Apr 10, 2025 pm 08:27 PM

    理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

    redis底層怎麼實現 redis底層怎麼實現 Apr 10, 2025 pm 07:21 PM

    Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

    redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

    要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

    redis怎麼使用鎖 redis怎麼使用鎖 Apr 10, 2025 pm 08:39 PM

    使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

    See all articles