Spring Boot整合redis,key自定義生成
阿新 • • 發佈:2019-01-23
redis key生成策略程式碼:
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 @EnableCaching public 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; } }
註解說明:
@Cacheable支援如下幾個引數:
value:快取位置的一段名稱,不能為空
key:快取的key,預設為空,表示使用方法的引數型別及引數值作為key,支援SpEL
keyGenerator:指定key的生成策略
condition:觸發條件,滿足條件就加入快取,預設為空,表示全部都加入快取,支援SpEL
@CacheEvict支援如下幾個引數:
value:快取位置的一段名稱,不能為空
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 { /** * 快取test * 快取生成規則: conf:redis:類名方法名引數hashcode * @param param1 * @param param2 * @return * * 注意: @Cacheable註解生成的型別在redis中預設都是string * 在每次請求的時候,都是先根據key到redis查詢是否存在,如不存在則執行方法中的程式碼 */ @Cacheable(value = "redis", keyGenerator = "cacheKeyGenerator") public String getRedisString(String param1, String param2) { return param1+":"+param2; } /** * 清除快取 * @return */ @CacheEvict(value = "redis", allEntries = true) public String cleanCache() { return "success"; } }
本章完結,待續!
本文說明:該文章屬於原創,如需轉載,請標明文章轉載來源