1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
@Slf4j @EnableCaching @Configuration public class CustomKeyGenerator extends CachingConfigurerSupport {
@Bean @Override public KeyGenerator keyGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(":Method:");
sb.append(method.getName()); StringJoiner sj = new StringJoiner(",", ":Params[", "]"); for (Object param : params) { if (param instanceof Array) { sj.add(param.toString()); } sj.add(param.toString()); } sb.append(sj.toString()); log.debug("Data Caching Redis Key : {}", sb.toString()); return sb.toString(); }; }
@Bean public KeyGenerator saveGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(":Method:"); sb.append("getOne"); sb.append(":Params["); try { Field id = params[0].getClass().getDeclaredField("id"); id.setAccessible(true); sb.append(id.get(params[0]).toString()); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } sb.append("]"); log.debug("Data Caching Redis Key : {}", sb.toString()); return sb.toString(); }; }
@Bean public KeyGenerator deleteByIdGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(":Method:"); sb.append("getById"); sb.append(":Params["); for (int i = 0; i < params.length; i++) { sb.append(params[i].toString()); if (i != (params.length - 1)) { sb.append(","); } } sb.append("]"); log.debug("Data Caching Redis Key : {}", sb.toString()); return sb.toString(); }; }
@Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig(); int expireTime = 0; if (expireTime > 0) { log.info("Redis 缓存过期时间 : {}", expireTime); redisCacheConfiguration = redisCacheConfiguration.entryTtl(Duration.ofSeconds(expireTime)); } else { log.info("Redis 未设置缓存过期时间"); } redisCacheConfiguration = redisCacheConfiguration.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) .disableCachingNullValues(); return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build(); } }
|