欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

springboot緩存之redis整合的方法-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)是專業(yè)的錦屏網(wǎng)站建設(shè)公司,錦屏接單;提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行錦屏網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

    默認(rèn)使用的是ConcurrentMapCacheManager的ConcurrentMapCache作為緩存組件。

    使用ConcurrentMap的時(shí)候,是將數(shù)據(jù)保存在ConcurrentMap<Object,Object>當(dāng)中的。

    實(shí)際在開發(fā)過(guò)程中,我們經(jīng)常使用的,是一些緩存中間件的。

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

    我們之前講解原理的時(shí)候,也發(fā)現(xiàn)了,springboot是支持很多的緩存配置的:

    如下圖所示的:

    springboot緩存之redis整合的方法

    默認(rèn)開始的配置的是:SimpleCacheConfiguration。

    其他的緩存是在什么時(shí)候開啟呢?

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

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這些都是表示,當(dāng)你導(dǎo)入了相應(yīng)的包的時(shí)候,這些配置才會(huì)是生效的哦。

    整合redis作為緩存

    如果有不會(huì)redis這個(gè)技術(shù)的同學(xué),尚硅谷當(dāng)中有周陽(yáng)老師發(fā)布的redis系列的講解視頻。或者大家可以最快地訪問(wèn)redis的官方網(wǎng)站,來(lái)進(jìn)行學(xué)習(xí),redis.cn是redis學(xué)習(xí)的中文網(wǎng)。

    安裝redis

    搜索redis鏡像

    springboot緩存之redis整合的方法

    這個(gè)是連接國(guó)外的倉(cāng)庫(kù),速度是比較慢的。

    我們推薦使用docker 中國(guó)。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

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

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    啟動(dòng)redis鏡像

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

    為了測(cè)試,打開redis的連接工具。

    redis desktop manager

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    測(cè)試redis常用的數(shù)據(jù)操作

    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整合的方法

    簡(jiǎn)單說(shuō)下redis原理

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

    springboot緩存之redis整合的方法

    這個(gè)RedisAutoConfiguration是給容器當(dāng)中加入了兩個(gè)組件:

    springboot緩存之redis整合的方法

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

    這兩個(gè)東西就是用來(lái)操作redis的。

    這就跟大家以前用的jdbcTemplate一樣,用來(lái)操作數(shù)據(jù)庫(kù)的東西。

    這就是spring用來(lái)簡(jiǎn)化操作redis的兩個(gè)template,如果在程序當(dāng)中想要用這兩個(gè)東西,就自動(dòng)注入就可以了。

    springboot緩存之redis整合的方法

    redis測(cè)試

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis操作list:

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    redis測(cè)試保存對(duì)象

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

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

    redisTemplate默認(rèn)的序列化規(guī)則

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    默認(rèn)的序列化器,就是使用的JdkSerializationRedisSerializer。

    默認(rèn)的序列化器,就是使用的JDK的序列化器。

    我們來(lái)切換成json的序列化器,就可以了。

    redis配置

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    在測(cè)試類當(dāng)中,自動(dòng)注入我們自己配置的redisTemplate。

    springboot緩存之redis整合的方法

    然后我們?cè)俅螠y(cè)試保存對(duì)象。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

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

    這就說(shuō)明白了,如果我們后面要保存對(duì)象的時(shí)候,我們經(jīng)常是要修改序列化器的。

    springboot緩存之redis整合的方法

    測(cè)試緩存

    springboot緩存之redis整合的方法

    我們之前使用的是ConCurrentMap的緩存管理器的。
    這個(gè)緩存管理器,幫我們來(lái)創(chuàng)建出來(lái)緩存組件的。
    緩存組件來(lái)實(shí)際給緩存中,進(jìn)行CRUD的工作的。

    現(xiàn)在我們引入了redis之后,會(huì)發(fā)生什么樣的效果呢?
    我們還是在application.properties當(dāng)中將debug=true,這樣就可以將自動(dòng)配置報(bào)告來(lái)打開。
    這樣的時(shí)候,我們重新啟動(dòng)我們的程序,在控制臺(tái)當(dāng)中,我們?nèi)ニ阉饕幌隆?br/>看看是哪一個(gè)自動(dòng)配置類,是生效的呢?

    springboot緩存之redis整合的方法

    原來(lái)默認(rèn)開啟的是:SimpleCacheConfiguration的。

    現(xiàn)在我們引入了redis相關(guān)的starters之后,程序默認(rèn)開啟的是RedisCacheConfiguration了。

    springboot緩存之redis整合的方法

    啟動(dòng)程序,直接進(jìn)行測(cè)試就可以了。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    說(shuō)明第一次查詢的時(shí)候,是查詢數(shù)據(jù)庫(kù)了。

    第二次查詢的時(shí)候,控制臺(tái)是沒有任何輸出的,說(shuō)明是查詢了緩存了。

    緩存默認(rèn)是只有redis開啟的。

    那么肯定是在redis當(dāng)中了。

    我們可以查看一下:

    springboot緩存之redis整合的方法

    這個(gè)說(shuō)明一個(gè)問(wèn)題,在k和v都是object的時(shí)候,默認(rèn)保存對(duì)象的時(shí)候,利用序列化來(lái)保存的。我們是想要讓redis自動(dòng)保存為json的。

    我們應(yīng)該怎么做呢?

    我們先來(lái)分析一下這些過(guò)程當(dāng)中的原理。

    1、我們是引入了redis的starter,所以我們的cachemanager變?yōu)榱藃ediscachemanager了,

    2、默認(rèn)創(chuàng)建的rediscachemanager在操作我們的數(shù)據(jù)的時(shí)候,傳入了一個(gè)redistemplate的東西。

    springboot緩存之redis整合的方法

    3、這個(gè)redistemplate是redisautoconfiguration幫我們創(chuàng)建的。這個(gè)redistemplate默認(rèn)使用的序列化機(jī)制是jdkserializationredisserializer的。這個(gè)就是相當(dāng)于,redis默認(rèn)給我們防止的redisCacheManager還不太符合我們的要求的。

    我們?cè)趺崔k呢?

    我們應(yīng)該自定義CacheManager的。

    自定義redisCacheManager

    springboot緩存之redis整合的方法

    這個(gè)時(shí)候,我們?cè)賳?dòng)項(xiàng)目,來(lái)進(jìn)行測(cè)試,這個(gè)時(shí)候,我們就可以看到redis當(dāng)中的結(jié)果,是我們想要的了。

    springboot緩存之redis整合的方法

    韞秋下次面試的時(shí)候,就可以問(wèn)那些想要來(lái)軟件園的人,說(shuō),你知道redis starter保存對(duì)象的時(shí)候,redisTemplate默認(rèn)的序列化規(guī)則是什么嗎?

    如果我們?cè)谑褂胷edis的過(guò)程中,我們想要修改默認(rèn)的序列化規(guī)則,我們應(yīng)該怎么做呢?

    我們可以自定義redisCacheManager,然后自定義redisTemplate,在redisTemplate當(dāng)中傳入json相關(guān)的序列化器的哦。

    springboot緩存之redis整合的方法

    遺留的小問(wèn)題

    數(shù)據(jù)庫(kù)

    我們?cè)跀?shù)據(jù)庫(kù)當(dāng)中的,department表當(dāng)中,放進(jìn)去一條數(shù)據(jù):

    springboot緩存之redis整合的方法

    mapper

    我們寫一個(gè)對(duì)應(yīng)的department操作的mapper。

    springboot緩存之redis整合的方法

    service

    我們?cè)賹懸粋€(gè)對(duì)應(yīng)的service

    springboot緩存之redis整合的方法

    controller

    springboot緩存之redis整合的方法

    啟動(dòng)項(xiàng)目測(cè)試

    springboot緩存之redis整合的方法

    然后我們看看redis當(dāng)中,是否是有數(shù)據(jù)的呢?

    springboot緩存之redis整合的方法

    我們看了,redis當(dāng)中dept相關(guān)的數(shù)據(jù),是有的。

    我們第二次來(lái)查詢dept的時(shí)候,就應(yīng)該走緩存redis了。

    但是我們第二次去查詢的,時(shí)候,出現(xiàn)了下面的錯(cuò)誤。

    錯(cuò)誤

    springboot緩存之redis整合的方法

    上面報(bào)錯(cuò)的意思就是說(shuō),不能夠去讀取json的。

    因?yàn)槭且巡块T的json對(duì)象,轉(zhuǎn)換成為員工的json對(duì)象,這是不可以的。

    這個(gè)就是因?yàn)椋覀兎胖玫膔edisCacheManager是操作員工的。

    springboot緩存之redis整合的方法

    所以,現(xiàn)在我們看到的這個(gè)效果,就是很神奇的哦。

    緩存的數(shù)據(jù),能夠存入到redis當(dāng)中。

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

    原來(lái)就是,我們存的是dept的json的數(shù)據(jù),我們的cachemanager,默認(rèn)是用employee的template來(lái)操作redis的。

    這個(gè)東西只能夠?qū)mployee的數(shù)據(jù)反序列化過(guò)來(lái)的。

    解決錯(cuò)誤

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這個(gè)時(shí)候,就等于有了2個(gè)redisCacheManager了,我們用哪個(gè)呢?

    我們?cè)趕ervice當(dāng)中,是可以指定的。

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    然后我們重啟項(xiàng)目,結(jié)果是報(bào)錯(cuò)了:

    springboot緩存之redis整合的方法

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

    比如,我們可以進(jìn)行下面的操作,來(lái)修復(fù)這個(gè)啟動(dòng)報(bào)錯(cuò)的內(nèi)容的呢:

    springboot緩存之redis整合的方法

    重新啟動(dòng)進(jìn)行項(xiàng)目測(cè)試

    這個(gè)時(shí)候,看看,我們?cè)谶M(jìn)行第二次部門查詢的時(shí)候,能不能夠正常地,成功地,從redis當(dāng)中反序列化地讀取到,我們的部門信息呢?

    springboot緩存之redis整合的方法

    springboot緩存之redis整合的方法

    這個(gè)時(shí)候,我們就發(fā)現(xiàn),不管是員工還是部門,我們都是可以從redis當(dāng)中反序列化成功查詢的。

    這個(gè)就是很完美的啦。

    編碼的方式操作緩存

    前面我們說(shuō)的,全部都是使用注解的方式,來(lái)給緩存當(dāng)中,來(lái)放置數(shù)據(jù)的。

    但是,在開發(fā)當(dāng)中,我們經(jīng)常會(huì),遇到這樣的情況。

    就是,我們開發(fā)進(jìn)行到某個(gè)階段,我們是需要將一些數(shù)據(jù),放到緩存當(dāng)中的。

    我們是需要,使用編碼的方式,來(lái)操作緩存的。

    比如我們?cè)诓樵兂鰜?lái)了部門的信息之后,就希望把這個(gè)信息,放入到redis當(dāng)中。

    我們可以把部門的cacheManager注入進(jìn)來(lái)。

    springboot緩存之redis整合的方法

    然后我們?cè)诰幋a的過(guò)程中,可以通過(guò)操作這個(gè)cacheManager來(lái)獲取緩存,

    然后,再操作緩存組件,來(lái)對(duì)數(shù)據(jù)進(jìn)行增刪改查。

    springboot緩存之redis整合的方法

    我們對(duì)上面的代碼,啟動(dòng)項(xiàng)目進(jìn)行測(cè)試,發(fā)現(xiàn)是可以的,是成功地給redis當(dāng)中放進(jìn)去了數(shù)據(jù)的:

    springboot緩存之redis整合的方法

    以上就是“springboot緩存之redis整合的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

    網(wǎng)站欄目:springboot緩存之redis整合的方法-創(chuàng)新互聯(lián)
    本文路徑:http://chinadenli.net/article48/cdpshp.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、ChatGPT、搜索引擎優(yōu)化網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

    外貿(mào)網(wǎng)站制作