CustomRedisCacheManager.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package com.izouma.nineth.config;
  2. import org.apache.commons.lang3.math.NumberUtils;
  3. import org.springframework.data.redis.cache.RedisCache;
  4. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  5. import org.springframework.data.redis.cache.RedisCacheManager;
  6. import org.springframework.data.redis.cache.RedisCacheWriter;
  7. import java.time.Duration;
  8. import java.util.Map;
  9. import java.util.Objects;
  10. import java.util.regex.Matcher;
  11. import java.util.regex.Pattern;
  12. /**
  13. * 自定义缓存管理(自定义失效时间)
  14. */
  15. public class CustomRedisCacheManager extends RedisCacheManager {
  16. private Pattern extractNumber = Pattern.compile("\\d+");
  17. public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
  18. super(cacheWriter, defaultCacheConfiguration);
  19. }
  20. public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration,
  21. Map<String, RedisCacheConfiguration> initialCacheConfigurations) {
  22. super(cacheWriter, defaultCacheConfiguration, initialCacheConfigurations, true);
  23. }
  24. @Override
  25. protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
  26. String[] array = name.split("#");
  27. if (array.length > 1) {
  28. // 解析TTL
  29. String ttlValue = Objects.toString(array[1],"");
  30. Matcher matcher = extractNumber.matcher(ttlValue);
  31. if(matcher.find()){
  32. Long seconds = NumberUtils.toLong(matcher.group());
  33. if(seconds > 0){
  34. cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(seconds)); // 秒
  35. }
  36. }
  37. }
  38. return super.createRedisCache(name, cacheConfig);
  39. }
  40. }