日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本學習記錄的代碼,部分參考自gitee碼云的如下工程。這個工程有詳盡的Spingboot1.x教程。鳴謝!

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

本學習記錄的示例代碼克隆地址,分支為develop

https://gitee.com/kutilion/MyArtifactForEffectiveJava.git

初次接觸redis緩存技術是應用在一個企業級web項目上。因為是跨國企業,必須對應多語言的情況。涉及到畫面上顯示文字,比如控件的標簽(label)等。解決方案是將所有相關語言的字符串都存在DB中,根據locale來取得相應語言的字符串。

這產生了一個性能問題:如果每次畫面刷新都要去DB中取數據,會對DB的負載產生不利影響,所以想到使用緩存來解決這個問題。畫面第一次刷新時從DB取得想要表示的語言,然后存放在緩存中。下一次畫面刷新就可以直接從緩存取得,減輕了DB負擔。

這是一個緩存實際應用的實例。下面來學習一下redis緩存。

安裝redis

實際項目一般會獨立建立一個緩存服務器,當然現在一般建立在云上。為了測試,可以在本地的PC上安裝redis。

下載路徑

https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100

下載redis-win-3.2.100.zip,并且解壓到C盤的redis目錄。命令行切換至C:edis, 之后可以參考下圖輸入命令redis-server.exe redis.windows.conf

成功需要重新啟動一個命令行界面,再按照下圖測試一下是否能夠正確緩存數據

以上安裝步驟參考自連接:

https://www.runoob.com/redis/redis-install.html

為工程引入redis

build.gradle

 implementation 'org.springframework.boot:spring-boot-starter-data-redis:2.1.3.RELEASE'

spring-boot-starter-data-redis的最新版本是2.1.5.RELEASE,不影響示例,所以使用稍舊的2.1.3.RELEASE版本。

BootApplication.java

@EnableCachingpublic class BootApplication {

一定要在啟動類中加入@EnableCaching,否則緩存不起作用

另外,需要加入緩存的類必須實現序列化接口,否則會拋出異常。示例中序列化的類為TestOjbect類。

配置redis

大部分的redis配置springboot都代勞了,我們只需要配置一些必要的屬性即可。具體可以參照注釋。其實如果使用注解方式(如@Cacheable等)來使用緩存,示例中的配置都可以省略。

application.properties

# spring.cache.type=simplespring.redis.database=0 # Redis服務器地址,示例為本地所以是127.0.0.1spring.redis.host=127.0.0.1# 端口號spring.redis.port=6379# 密碼,默認為沒有密碼。如果利用redis-cli設定了密碼,這里必須定義spring.redis.password=# 連接池最大連接數(使用負值表示沒有限制) spring.redis.pool.max-active=8# 連接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1# 連接池中的最大空閑連接 spring.redis.pool.max-idle=8# 連接池中的最小空閑連接 spring.redis.pool.min-idle=0# 連接超時時間(毫秒) spring.redis.timeout=1000

最上方的spring.cache.type=simple,如果打開注釋,則表示強制使用Java的ConcurrentHashMap來作為緩存。redis將不起作用。一般在開發階段會使用這個屬性。

使用redis

現在已經啟動了redis服務,在springboot里的配置也已經做好了。可以開始使用redis。下面學習兩種使用redis的方式:通過注解使用緩存和通過RedisTemplate使用緩存。

通過注解使用緩存

  • studySpringboot.n13.redis.mapper.RedisMapper.java
//...@CacheConfig(cacheNames = "testObjects")@Mapperpublic interface RedisMapper { @Cacheable(key = "#p0") @Select("SELECT * FROM TESTOBJECT WHERE ID = #{id}") TestObject findById(@Param("id") String id);//...

這個類利用mybatis的功能,findById方法從DB中取得數據。使用@Cacheable注解將取得的數據放入緩存。注意類上方的注解CacheConfig指定了緩存名,它會作為緩存key的前半部分出現。Cacheable的屬性key就是緩存key的后半部分,這里指定的#p0表明是方法的第一個參數。它也支持直接使用參數名,前提是參數名不是某些特殊保留字。比如示例方法用的id就不能使用,否則會出現異常。下面是一個key的小例子:

testOjbects::20

這個類只使用了Cacheable注解,從DB里第一次去除的數據被存入緩存,如果DB的數據變化了,是不會反映到緩存中的。通過下面的測試可以證實這一點:

  • studySpringboot.n13.redis.mapper.RedisTest.java
 @Before public void clear() throws Exception { redisMapper.delete("20"); } @Test public void test() throws Exception { redisMapper.insert("20

總結

以上是生活随笔為你收集整理的springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。