RedisConfigCacheManager.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package cn.yoshop.config;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.springframework.data.redis.cache.*;
  4. import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
  5. import org.springframework.data.redis.serializer.RedisSerializationContext;
  6. import java.time.Duration;
  7. /**
  8. * Description:
  9. *
  10. * @author tanlie
  11. * Date: 2024/9/5 11:01
  12. */
  13. public class RedisConfigCacheManager extends RedisCacheManager {
  14. private static final CacheKeyPrefix DEFAULT_CACHE_KEY_PREFIX = cacheName -> cacheName + ":";
  15. public RedisConfigCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
  16. super(cacheWriter, defaultCacheConfiguration);
  17. }
  18. private static final RedisSerializationContext.SerializationPair<Object> DEFAULT_PAIR = RedisSerializationContext.SerializationPair
  19. .fromSerializer(new GenericJackson2JsonRedisSerializer());
  20. /**
  21. * @param name
  22. * @param cacheConfig
  23. * @return
  24. */
  25. @Override
  26. protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
  27. final int lastIndexOf = StringUtils.lastIndexOf(name, '#');
  28. if (lastIndexOf > -1) {
  29. final String ttl = StringUtils.substring(name, lastIndexOf + 1);
  30. final Duration duration = Duration.ofSeconds(Long.parseLong(ttl));
  31. cacheConfig = cacheConfig.entryTtl(duration);
  32. //修改缓存key和value值的序列化方式
  33. cacheConfig = cacheConfig.computePrefixWith(DEFAULT_CACHE_KEY_PREFIX)
  34. .serializeValuesWith(DEFAULT_PAIR);
  35. final String cacheName = StringUtils.substring(name, 0, lastIndexOf);
  36. return super.createRedisCache(cacheName, cacheConfig);
  37. } else {
  38. //修改缓存key和value值的序列化方式
  39. cacheConfig = cacheConfig.computePrefixWith(DEFAULT_CACHE_KEY_PREFIX)
  40. .serializeValuesWith(DEFAULT_PAIR);
  41. return super.createRedisCache(name, cacheConfig);
  42. }
  43. }
  44. }