日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot集成redis,key自定義生成方式

瀏覽:175日期:2023-07-08 10:11:23
一)自定義redis key生成策略

@Configuration:表示當前類屬于一個配置類,類似于一個spring.cfg.xml。

@EnableCaching:表示支持啟用緩存。

自定義配置源碼:

import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.cache.RedisCachePrefix;import org.springframework.data.redis.core.RedisTemplate; import com.alibaba.fastjson.JSON; /** * redis配置工具類 * @Configuration表示當前類屬于配置類 * @EnableCaching表示支持緩存 * @author ouyangjun */@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport { /** * redis key生成策略 * target: 類 * method: 方法 * params: 參數 * @return KeyGenerator * 注意: 該方法只是聲明了key的生成策略,還未被使用,需在@Cacheable注解中指定keyGenerator * 如: @Cacheable(value = 'key', keyGenerator = 'cacheKeyGenerator') */ @Bean public KeyGenerator cacheKeyGenerator() {return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) {// 由于參數可能不同, hashCode肯定不一樣, 緩存的key也需要不一樣sb.append(JSON.toJSONString(obj).hashCode()); } return sb.toString();}; } /** * redis全局默認配置 * @param redisTemplate * @return */ @Bean public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);redisCacheManager.setUsePrefix(true);// key緩存的前綴,以conf開頭RedisCachePrefix cachePrefix = new RedisPrefix('conf');redisCacheManager.setCachePrefix(cachePrefix);// key緩存的過期時間, 600秒redisCacheManager.setDefaultExpiration(600L);return redisCacheManager; }}二)SpringBoot自帶緩存方式

注解說明:

@Cacheable含義:當調用該注解聲明的方法時,會先從緩存中查找,判斷是否有key相同緩存的數據,如果有,就直接返回數據,如果沒有,執行方法,然后把返回的數據以鍵值的方式存儲到緩存中,方便下次同樣參數請求時,直接從緩存中返回數據。

@Cacheable支持如下幾個參數:

cacheNames:緩存位置的一段名稱,不能為空,和value一個含義。

value:緩存位置的一段名稱,不能為空,和cacheNames一個含義。

key:緩存的key,默認為空,表示使用方法的參數類型及參數值作為key,支持SpEL。

keyGenerator:指定key的生成策略。

condition:觸發條件,滿足條件就加入緩存,默認為空,表示全部都加入緩存,支持SpEL。

@CacheEvict含義:當存在相同key的緩存時,把緩存清空,相當于刪除。

@CacheEvict支持如下幾個參數:

cacheNames:緩存位置的一段名稱,不能為空,和value一個含義。

value:緩存位置的一段名稱,不能為空,和cacheNames一個含義。

key:緩存的key,默認為空,表示使用方法的參數類型及參數值作為key,支持SpEL。

condition:觸發條件,滿足條件就加入緩存,默認為空,表示全部都加入緩存,支持SpEL。

allEntries:true表示清除value中的全部緩存,默認為false。

測試代碼:

package hk.com.cre.process.basic.service.impl; import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.annotation.Cacheable; public class RdisCacheTest { /** * 緩存測試 * 緩存生成規則: conf:redis:類名方法名參數hashcode * 注意: @Cacheable注解生成的類型在redis中默認都是string * 在每次請求的時候,都是先根據key到redis查詢是否存在,如不存在則執行方法中的代碼 */ @Cacheable(cacheNames = 'redis', keyGenerator = 'cacheKeyGenerator') public String getRedisString(String param1, String param2) {return param1+':'+param2; } /** * 清除緩存 */ @CacheEvict(cacheNames = 'redis', allEntries = true) public String cleanCache() {return 'success'; }}Spring Cache ? KeyGenerator自定義rediskey1. 概述

在此教程中,我們將演示如何使用 Spring Cache 創建自定義密鑰生成器。

2. KeyGenerator

這負責為緩存中的每個數據項生成每個鍵,這些鍵將用于在檢索時查找數據項。

此處的默認實現是SimpleKeyGenerator ?它使用提供的方法參數來生成密鑰。這意味著,如果我們有兩個使用相同的緩存名稱和參數類型集的方法,則很有可能會導致沖突。

它還意味著緩存數據可以由另一種方法覆蓋。

3. 自定義密鑰生成器

密鑰生成器只需要實現一個方法:

Object generate(Object object, Method method, Object... params)

如果未正確實現或使用,則可能導致覆蓋緩存數據。

讓我們來看看實現:

public class CustomKeyGenerator implements KeyGenerator { public Object generate(Object target, Method method, Object... params) {return target.getClass().getSimpleName() + '_' + method.getName() + '_' + StringUtils.arrayToDelimitedString(params, '_'); }}

之后,我們有兩種可能的方式使用它;第一種是在應用程序Config中聲明一個豆。

請務必指出,類必須從緩存配置支持或實現緩存配置程序擴展:

@EnableCaching@Configurationpublic class ApplicationConfig extends CachingConfigurerSupport { @Bean public CacheManager cacheManager() {SimpleCacheManager cacheManager = new SimpleCacheManager();Cache booksCache = new ConcurrentMapCache('books');cacheManager.setCaches(Arrays.asList(booksCache));return cacheManager; } @Bean('customKeyGenerator') public KeyGenerator keyGenerator() {return new CustomKeyGenerator(); }}

第二種方法是將其用于特定方法:

@Componentpublic class BookService { @Cacheable(value = 'books', keyGenerator = 'customKeyGenerator') public List<Book> getBooks() {List<Book> books = new ArrayList<>();books.add(new Book('The Counterfeiters', 'André Gide'));books.add(new Book('Peer Gynt and Hedda Gabler', 'Henrik Ibsen'));return books; }}4. 結論

在本文中,我們探討了實現自定義春季緩存的密鑰生成器的方法。

與往常一樣,示例的完整源代碼可在 GitHub 上找到。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品第二页| 91精品一区国产高清在线gif| 在线一区电影| 成人羞羞视频播放网站| 中文字幕日韩欧美精品高清在线| 欧美日韩免费观看一区=区三区| 欧美伊人影院| 98精品久久久久久久| 欧美日韩国产高清| 国产精品欧美日韩一区| 日韩欧美一区二区三区免费观看| 亚洲午夜免费| 欧美专区在线| 欧美一区激情| 西西人体一区二区| 老牛影视一区二区三区| 一区二区国产在线| 亚洲精品少妇| 日本va欧美va精品发布| 久久99影视| 日韩成人高清| 欧美特黄a级高清免费大片a级| 亚洲欧美日韩在线观看a三区| 亚洲九九精品| 久久中文在线| 久久久成人网| 激情五月综合网| 国产亚洲精品v| 国产精品2023| 激情综合激情| 亚洲电影在线| 国产精品国码视频| 亚洲欧洲另类| 成人亚洲一区| 久久精品伊人| 国产麻豆精品| 奇米亚洲欧美| 亚洲一区二区毛片| 日韩电影免费网站| 亚洲先锋成人| 久久久噜噜噜| 午夜影院欧美| 99在线|亚洲一区二区| 激情久久五月| 伊人影院久久| 国产日韩欧美中文在线| 美女尤物久久精品| 亚洲精品在线a| 日韩高清在线观看一区二区| 红杏一区二区三区| 国产精品三上| 精品一区二区三区亚洲| 欧美1级日本1级| 欧美天堂一区| 久久国产免费| 青青草精品视频| 91精品亚洲| 国产图片一区| 99久久亚洲精品蜜臀| 日韩高清不卡在线| 91精品一区国产高清在线gif| 国产精品国产一区| 亚洲婷婷丁香| 91亚洲国产高清| 国产一卡不卡| 国产一二在线播放| 蜜桃视频在线网站| 久久精品影视| 蜜桃av一区二区三区电影| 99国内精品| 午夜久久av | 日韩二区在线观看| 日韩精品中文字幕吗一区二区| 男女男精品视频网| 精品72久久久久中文字幕| 久久精品亚洲人成影院| 日韩高清电影免费| 99国产一区| 美女毛片一区二区三区四区最新中文字幕亚洲| 国产精品chinese| 免费国产自线拍一欧美视频| 精品久久美女| 日韩精品久久久久久| 亚洲电影在线| 国产成人免费视频网站视频社区| 亚洲精品黄色| 黄色亚洲在线| 美女av在线免费看| 亚洲精品九九| 亚洲深爱激情| 亲子伦视频一区二区三区| 国产高清日韩| 日韩精品一区二区三区中文在线 | 国产精品1区在线| 久久不卡日韩美女| 国产精品a级| 五月天激情综合网| 亚洲免费成人av在线| 日韩在线观看不卡| 午夜视频一区二区在线观看| 日韩欧美综合| 免费成人在线观看| 久久精品av| 九九九精品视频| 日韩av网站在线观看| 国产农村妇女精品一二区| bbw在线视频| 亚洲一二av| 日韩三级精品| 欧美欧美黄在线二区| 亚洲精品在线国产| 日本成人一区二区| 日本午夜精品久久久| 少妇精品久久久一区二区| 日本亚洲最大的色成网站www | 午夜视频精品| 福利一区视频| 国产在线视频欧美一区| 老牛国内精品亚洲成av人片| 无码日韩精品一区二区免费| 亚洲一区二区三区无吗| 玖玖玖国产精品| 中文字幕日韩高清在线| 亚洲日韩视频| 91伊人久久| 久久不见久久见中文字幕免费| 国产欧美日韩一级| 欧美黑人做爰爽爽爽| 色网在线免费观看| 亚洲一区国产| 蜜臀久久久久久久| 免费在线小视频| 国产91精品对白在线播放| 日韩成人精品一区| 麻豆国产91在线播放| 激情视频网站在线播放色| 丝袜美腿一区| 自拍日韩欧美| 亚洲精品护士| 麻豆国产精品视频| 久久精品二区三区| 欧洲精品一区二区三区| 你懂的亚洲视频| 国产精品白浆| 午夜视频精品| 成人日韩av| 国产精品久久久久毛片大屁完整版| 在线日韩一区| 欧美1区二区| 伊人久久亚洲| 蜜桃一区二区三区| 国产精品亚洲欧美一级在线| 亚洲欧美日韩国产一区| 亚洲成人精品| 亚洲综合丁香| 日韩av中文字幕一区| 国语精品一区| 一本色道久久精品| 丝袜亚洲另类欧美| 日韩av不卡在线观看| 久久精品国产免费| 在线日韩电影| 日本国产欧美| 国产精品久久观看| 久久国产小视频| 亚洲精品综合| 精品一区二区三区亚洲| 999视频精品| 国产欧美日韩在线观看视频| 国产乱子精品一区二区在线观看| 在线日韩中文| 国产一区不卡| 欧洲亚洲一区二区三区| 日韩网站在线| 国产麻豆久久| 日韩在线不卡| 日韩av在线播放网址| 国产精品蜜月aⅴ在线| 午夜亚洲福利| 性一交一乱一区二区洋洋av| 久久亚洲国产| 国产suv精品一区二区四区视频 | 久久精选视频| 久久婷婷激情| 99久久99视频只有精品| 久久亚洲电影| 欧美日韩中出| 日韩国产激情| 99精品小视频| 日韩av一区二区三区四区| 国产精品草草| 日韩欧美美女在线观看| 日韩精品亚洲专区| 91综合网人人| 亚洲精品一级二级三级| 视频在线不卡免费观看| 只有精品亚洲| 日韩在线免费| 欧美国产先锋| 亚洲精品日本|