电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:65日期: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
相關文章:
主站蜘蛛池模板: 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | EFM 022静电场测试仪-套帽式风量计-静电平板监测器-上海民仪电子有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 河南凯邦机械制造有限公司 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 电销卡_北京电销卡_包月电话卡-豪付网络| 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | EFM 022静电场测试仪-套帽式风量计-静电平板监测器-上海民仪电子有限公司 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 |