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

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:171日期: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: 參數(shù) * @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) {// 由于參數(shù)可能不同, 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含義:當調(diào)用該注解聲明的方法時,會先從緩存中查找,判斷是否有key相同緩存的數(shù)據(jù),如果有,就直接返回數(shù)據(jù),如果沒有,執(zhí)行方法,然后把返回的數(shù)據(jù)以鍵值的方式存儲到緩存中,方便下次同樣參數(shù)請求時,直接從緩存中返回數(shù)據(jù)。

@Cacheable支持如下幾個參數(shù):

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

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

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

keyGenerator:指定key的生成策略。

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

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

@CacheEvict支持如下幾個參數(shù):

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

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

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

condition:觸發(fā)條件,滿足條件就加入緩存,默認為空,表示全部都加入緩存,支持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 { /** * 緩存測試 * 緩存生成規(guī)則: conf:redis:類名方法名參數(shù)hashcode * 注意: @Cacheable注解生成的類型在redis中默認都是string * 在每次請求的時候,都是先根據(jù)key到redis查詢是否存在,如不存在則執(zhí)行方法中的代碼 */ @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 創(chuàng)建自定義密鑰生成器。

2. KeyGenerator

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

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

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

3. 自定義密鑰生成器

密鑰生成器只需要實現(xiàn)一個方法:

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

如果未正確實現(xiàn)或使用,則可能導致覆蓋緩存數(shù)據(jù)。

讓我們來看看實現(xiàn):

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

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

請務(wù)必指出,類必須從緩存配置支持或?qū)崿F(xiàn)緩存配置程序擴展:

@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. 結(jié)論

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
最新国产精品| 亚洲福利一区| 欧美天堂视频| 国产日韩欧美一区二区三区| 日韩视频一区二区三区在线播放免费观看| 欧美精品不卡| 日韩一区二区三区四区五区| 91精品一区二区三区综合| 日本欧美韩国一区三区| 99国产精品免费视频观看| 精品中文字幕一区二区三区| 久久中文字幕一区二区三区| 亚洲区欧美区| 香蕉视频成人在线观看| 亚洲二区在线| 99国产精品视频免费观看一公开 | 国产99在线| 伊人久久亚洲美女图片| 99国产精品久久久久久久| 欧美一区三区| 久久久久国产精品一区三寸| 欧美freesex黑人又粗又大| 国产图片一区| 国产日韩1区| 日韩成人一级| 日本视频中文字幕一区二区三区| 国产伦精品一区二区三区千人斩 | 国产精品99精品一区二区三区∴| 欧美日韩在线二区| 国产精品sm| 亚洲精选av| 美女精品网站| 激情婷婷亚洲| 红桃视频亚洲| 亚洲综合日韩| 中文字幕日本一区二区| 青青国产精品| 国产精品久久免费视频| 日韩欧乱色一区二区三区在线| 午夜一级在线看亚洲| 一区二区三区四区精品视频| 日韩中文字幕视频网| 亚洲精品综合| 国产日韩1区| 电影91久久久| 久久精品高清| 亚洲欧美久久久| 日韩精选在线| 久久精品亚洲一区二区| 毛片在线网站| 久久国产成人| 日本少妇一区二区| 久久不见久久见国语| 激情视频一区二区三区| 亚洲欧美高清| 国产欧美一区二区三区米奇| 欧美日韩四区| 日韩精品亚洲专区| 国产亚洲精品美女久久| 国产极品一区| 精品久久在线| 久久国产人妖系列| 精品一区二区三区中文字幕视频 | 噜噜噜躁狠狠躁狠狠精品视频| 中文字幕一区二区三区在线视频| 97精品久久| 国产精品毛片久久| 亚洲免费观看高清完整版在线观| 日韩精品a在线观看91| 成人精品久久| 日本少妇一区| 亚洲天堂免费| 国产探花在线精品一区二区| 老司机免费视频一区二区三区| 久久精品国产在热久久| 91久久久精品国产| 日本va欧美va瓶| 美女性感视频久久| 欧美91精品| 国产精品嫩模av在线| 久久裸体视频| 青草国产精品| 国产一区二区三区久久久久久久久| 欧美日韩在线网站| 鲁大师成人一区二区三区| 国产精品久久久久久久久久齐齐| 日韩在线看片| 91九色精品| 黄色欧美在线| 久久亚洲欧洲| 国产精品毛片久久| 日韩av中文字幕一区| 午夜影院一区| 奇米色欧美一区二区三区| 成人片免费看| 欧美三区不卡| 欧美日韩在线网站| 久久精品 人人爱| 女主播福利一区| 日韩在线欧美| 久久精品72免费观看| 丝袜亚洲精品中文字幕一区| 精品一区二区三区四区五区| 日韩1区2区3区| 亚洲一区日本| 久久人人99| 国产suv精品一区二区四区视频| 日本久久二区| 免费在线观看精品| 欧美1级日本1级| 婷婷激情一区| 国产精品久久观看| 欧美1区2区3| 亚洲精品九九| 麻豆精品新av中文字幕| 日韩精品久久理论片| 日韩网站在线| 精品视频在线你懂得| 国产日韩中文在线中文字幕| 日本亚洲视频在线| 亚洲一二三区视频| 久热精品在线| 日韩视频一区| 91久久午夜| 国产日韩专区| 国产亚洲一级| 亚洲免费中文| 麻豆成人在线| 99热精品在线| 午夜在线视频观看日韩17c| 黄色国产精品| 激情婷婷欧美| 日韩av首页| 97se综合| 亚洲综合在线电影| 久久精品免费一区二区三区| 亚洲a一区二区三区| 久久精品国产68国产精品亚洲| 日韩精品免费一区二区三区| 日韩中文在线播放| 欧美综合另类| 1024精品一区二区三区| 黄色成人精品网站| 美日韩精品视频| 中文字幕日本一区| 人人爱人人干婷婷丁香亚洲| 久久激情综合网| 欧美日韩亚洲国产精品| 国产精品毛片视频| av资源中文在线| 亚洲v在线看| 在线亚洲精品| 日韩精品一页| 国产高清精品二区| 久久精品国产成人一区二区三区| 国际精品欧美精品| 韩国精品主播一区二区在线观看| 国产精品88久久久久久| 免播放器亚洲一区| 欧美伊人影院| 美女视频免费精品| 老牛影视精品| 樱桃视频成人在线观看| 激情视频一区二区三区| 亚洲影院天堂中文av色| 国产精品一区二区av日韩在线| 精品国产欧美日韩一区二区三区| 精品亚洲美女网站| 视频一区中文字幕| 国产欧美一区| 久久九九精品| 日韩精品91亚洲二区在线观看| 国产精品久久| 久久精品不卡| 亚洲毛片一区| 欧美aaaaaa午夜精品| 亚洲成人va| 亚洲一区二区三区四区五区午夜| 91成人在线网站| 日韩成人精品一区二区| 精品一区免费| 日韩av二区在线播放| 精品日韩一区| 国产农村妇女精品一二区| 青草综合视频| 日本精品不卡| 美国三级日本三级久久99| 国产精品99久久免费观看| 亚洲国产专区| 国产日韩欧美一区二区三区在线观看| 色网在线免费观看| 亚洲1区在线观看| 狂野欧美性猛交xxxx| 亚洲黄页一区| 美女在线视频一区| 国产亚洲毛片在线| 精品一区二区三区中文字幕| 视频一区二区中文字幕| 鲁大师精品99久久久| 国产婷婷精品|