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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cache-缓存注解(二)

發布時間:2025/3/21 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cache-缓存注解(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 導讀
  • 概述
  • 注解@Cacheable 和@CachePut
    • 表達式值的引用
  • 注解@CacheEvict
  • 案例

導讀

Spring-Cache手札

Spring Cache抽象-緩存注解

實戰-Redis-20Spring緩存機制整合Redis

關于Spring Cache以及注解,之前總結了幾篇。現在我們再來細化下


概述

注解描述
@Cacheable表明在進入方法之前, Spring 會先去緩存服務器中查找對應 key 的緩存值,如果找到緩存值,那么 Spring 將不會再調用方法,而是將緩存值讀出,返回給調用者;如果沒有找到緩存值,那么 Spring 就會執行你的方法,將最后的結果通過 key 保存到緩存服務器中
@CachePutSpring 會將該方法返回的值緩存到緩存服務器中,這里簡要注意的是, Spring 不會事先去緩存服務器中查找,而是直接執行方法,然后緩存。換句話說,該方法始終會被 Spring 所調用
@CacheEvict移除緩存對應的 key 的值
@Caching這是一個分組注解,它能夠同時應用于其他緩存的注解
  • 注解@Cacheable 和@CachePut 都可以保存緩存鍵值對,只是它們的方式略有不同, 請注意二者的區別,它們只能運用于有返回值的方法中
  • 而刪除緩存 key 的@CacheEvict 則可以用在 void 的方法上,因為它并不需要去保存任何值 。
  • 上述注解都能標注到類或者方法之上,如果放到類上,則對所有的方法都有效,如果放到方法上,則只是對方法有效。
  • 在大部分情況下,會放置到方法上。 @Cacheable 和 @CachePut 可以配置的屬性接近。
  • 一般而言,對于查詢,我們會考慮使用@Cacheable
  • 對于插入和修改,考慮使用@CachePut
  • 對于刪除操作,我們會考慮使用@CacheEvict。

注解@Cacheable 和@CachePut

因為@Cacheable 和@CachePut 兩個注解的配置項 比較接近,所以這里就將這兩個注解一并來看

屬性配置類型說明
valueString[]使用緩存的名稱
conditionStringSpring 表達式,如果表達式返回值為 false,則不會將緩存應用到方法上, true 則會
keyStringSpring 表達式,可以通過它來計算對應緩存的 key
unlessStringSpring 表達式,如果表達式返回值為 true,則不會將方法的結果放到緩存上

value 和 key 這兩個屬性使用得最多,所以先來討論這兩個屬性。

value 是一個數組,可以引用多個緩存管理器.

案例----->https://blog.csdn.net/yangshangwei/article/details/82961772#Service_664

如上代碼所示定義redisCacheManager后就可以引用它了,而對于 key 則是緩存中的鍵,它支持 Spring 表達式,通過 Spring 表達式就可以自定義緩存的 key。


表達式值的引用

Spring 表達式和緩存注解之間的約定,通過這些約定去引用方法的參數和返回值的內容,使得其注入 key 所定義的 Spring 表達式的結果中。

表達式描述備注
#root.args定義傳遞給緩存方法的參數不常用,暫不討論
#root.caches該方法執行是對應的緩存名稱,它是一個數組不常用,暫不討論
#root.target執行緩存的目標對象不常用,暫不討論
#root.targetClass目標對象的類,它是#root.target.class 的縮寫不常用,暫不討論
#root.method緩存方法不常用,暫不討論
#root.methodName緩存方法的名稱,它是#root.method.name 的縮寫不常用,暫不討論
#result方法返回結果值,還可以使用 Spring 表達式進一步讀取其屬性請注意該表達式不能用于注解@Cacheable,因為該注解的方法可能不會被執行,這樣返回值就無從談起了
#Argument任意方法的參數,可以通過方法本身的名稱或者下標去定義比如 getRole(Long id)方法,想讀取 id 這個參數,可以寫為#id,或者#a0、#p0,建議寫為#id,可讀性高

這樣就方便使用對應的參數或者返回值作為緩存的 key 了。


注解@CacheEvict

注解@CacheEvict 主要是為了移除緩存對應的鍵值對,主要對于那些刪除的操作,先來了解它存在哪些屬性。

屬性配置類型說明
valueString[]要使用緩存的名稱
keyStringSpring 表達式,可以通過它來計算對應緩存的 key
conditionStringSpring 表達式,如果表達式返回值為 false,則不會將緩存應用到方法上, true 則會
allEntriesboolean如果為 true,則刪除特定緩存所有鍵值對,默認值為 false,請注意它將消除所有緩存服務器的緩存,這個屬性慎用
beforelnvocationboolean指定在方法前后移除緩存,如果指定為 true,則在方法前刪除緩存:如果為 false,則在方法調用后刪除級存,默認值為 false
  • value 和 key 與之前的@Cacheable 和@CachePut 是一致的。
  • 屬性 allEntries 要求刪除緩存服務器中所有的緩存,這個時候指定的 key 將不會生效,所以這個屬性要慎用
  • beforeInvocation 屬性指定緩存在方法前或者方法后移除。

案例

Spring緩存機制整合Redis

package com.artisan.ssm_redis.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional;import com.artisan.ssm_redis.dao.RoleDao; import com.artisan.ssm_redis.domain.Role; import com.artisan.ssm_redis.service.RoleService;@Service public class RoleServiceImpl implements RoleService {// 自動注入@Autowiredprivate RoleDao roleDao;/*** 使用@Cacheable定義緩存策略 當緩存中有值,則返回緩存數據,否則訪問方法得到數據 通過value引用緩存管理器,通過key定義鍵* * @param id* 角色編號* @return 角色*/@Override@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)@Cacheable(value = "redisCacheManager", key = "'redis_role_'+#id")public Role getRole(Long id) {return roleDao.getRole(id);}/*** 使用@CachePut則表示無論如何都會執行方法,最后將方法的返回值再保存到緩存中* 使用在插入數據的地方,則表示保存到數據庫后,會同期插入到Redis緩存中* * @param role* 角色對象* @return 角色對象(會回填主鍵)*/@Override@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)@CachePut(value = "redisCacheManager", key = "'redis_role_'+#result.id")public Role insertRole(Role role) {roleDao.insertRole(role);return role;}/*** 使用@CachePut,表示更新數據庫數據的同時,也會同步更新緩存* * @param role* 角色對象* @return 影響條數*/@Override@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)@CachePut(value = "redisCacheManager", key = "'redis_role_'+#role.id")public int updateRole(Role role) {return roleDao.updateRole(role);}/*** 使用@CacheEvict刪除緩存對應的key* * @param id* 角色編號* @return 返回刪除記錄數*/@Override@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)@CacheEvict(value = "redisCacheManager", key = "'redis_role_'+#id")public int deleteRole(Long id) {return roleDao.deleteRole(id);}}

總結

以上是生活随笔為你收集整理的Spring Cache-缓存注解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 蜜桃aaa| 国产伦精品一区二区三区四区 | 按摩毛片 | 性xxxfllreexxx少妇| 婷婷开心激情 | 亚洲中文字幕无码av永久 | 少妇25p| 91蜜桃在线观看 | 欧美日韩成人在线播放 | 全国男人的天堂网 | 欧美专区在线观看 | 国产精品网站在线观看 | 香港三级日本三级 | 婷婷激情久久 | 探花国产 | 91精品国产色综合久久不卡蜜臀 | 亚洲两性视频 | 99久久精品免费视频 | 淫岳高潮记小说 | 操操干干 | 国产亚洲精品久久久久久 | 成人涩涩视频 | 大j8黑人w巨大888a片 | 91艹| 人操人操 | 午夜免费播放观看在线视频 | 黄色三级国产 | 亚洲美女av网站 | 免费av看片| 国产美女裸体无遮挡免费视频 | 韩国成人理伦片免费播放 | 男女在线免费观看 | 成人羞羞免费 | 男女插插网站 | 都市激情中文字幕 | 岳狂躁岳丰满少妇大叫 | 成人久久久 | 精品+无码+在线观看 | av黄色av | 日韩三级在线免费观看 | 欧美一级性生活 | 手机在线观看毛片 | 狠狠干老司机 | 午夜伦理剧场 | 草草地址线路①屁屁影院成人 | 精品久久久精品 | va在线看 | 98自拍视频| 偷拍青青草 | 亚洲综合av一区二区 | 色爱综合网 | 国产一级aa大片毛片 | 国产第一页在线观看 | 97影视| 欧美激情在线免费 | 久久综合第一页 | 不卡影院一区二区 | 性感美女av在线 | 成人黄色在线 | 国产福利91精品一区二区三区 | 午夜影视免费 | 米奇7777狠狠狠狠视频 | 四虎在线免费播放 | 青春草av| 久久久一级片 | 粉嫩一区二区三区 | 日本一区不卡视频 | 视频一区二区在线播放 | 伊人成人在线观看 | 在线看av网址| 蜜桃av乱码一区二区三区 | 免费看黄色片的网站 | 91在线小视频 | 欧美日韩成人精品 | 在线观看日韩av电影 | 九九九久久久 | 自拍偷拍激情视频 | 亚洲欧洲视频在线观看 | 美女搡bbb又爽又猛又黄www | 亚洲涩涩网 | 97视频网址 | 免费日韩毛片 | 成人黄色片视频 | 我要看一级片 | 丰满av| 91中文字幕在线视频 | 亚洲丝袜在线观看 | 性欧美大战久久久久久久免费观看 | 国产精品啪 | 真人一毛片 | 亚洲精品在线中文字幕 | 日韩精品成人免费观看视频 | 国产做爰全免费的视频软件 | 公侵犯人妻一区二区 | a极黄色片| 久久久久免费精品视频 | 欧美色哟哟| 久久五月网 | 欧美做爰性生交视频 |