@Cacheable笔记
https://blog.csdn.net/weixin_44488164/article/details/89479170
常见的如分页查询:使用单引号指定分割符,最终会拼接为一个字符串
@Cacheable(key = "#page+'-'+#pageSize")
当然还可以使用单引号自定义字符串作为缓存的key值
@Cacheable(key = "'countUsers'")
在redis中效果值如图
---------------------------------------------------------
详细讲解
https://www.jianshu.com/p/931484bb3fdc
对上述代码稍加改写,更适合自己
cache:
defaultCache:
expireTime: 200
userCacheList:
- cacheName: xxxxx
expireTime: 1800
- cacheName: xxxxxxx
expireTime: 1800
- cacheName: xxxxxxxxxx
expireTime: 30
- cacheName: xxxxxxxxxxxxxxxx
expireTime: 180000
@Data @Configuration @ConfigurationProperties(prefix = "cache") public class CacheConfig { /** * The User cache list. */ List<CacheExpireConfig> userCacheList; /** * The Default cache. */ CacheExpireConfig defaultCache; /** * The type Cache expire config. */ @Data public static class CacheExpireConfig { /** * The Cache name. */ String cacheName; /** * The Expire time. */ Long expireTime; } }
/** * The type Redis cache config. */ @Configuration public class RedisCacheConfig { /** * The Cache config. */ @Autowired CacheConfig cacheConfig; /** * 缓存管理器 * * @param lettuceConnectionFactory the lettuce connection factory * @return cache manager */ @Bean public CacheManager cacheManager(RedisConnectionFactory lettuceConnectionFactory) { // 对每个缓存空间应用不同的配置 Set<String> cacheNames = new HashSet<>(); Map<String, RedisCacheConfiguration> initCacheConfigMap = new HashMap<>(); List<CacheConfig.CacheExpireConfig> userCacheList = cacheConfig.getUserCacheList(); for (CacheConfig.CacheExpireConfig userCache : userCacheList) { cacheNames.add(userCache.getCacheName()); RedisCacheConfiguration userConfig = getDefaultRedisCacheConfiguration() .entryTtl(Duration.ofSeconds(userCache.getExpireTime())); initCacheConfigMap.put(userCache.getCacheName(), userConfig); } RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory) .cacheDefaults(getDefaultRedisCacheConfiguration()) .initialCacheNames(cacheNames) .withInitialCacheConfigurations(initCacheConfigMap) .build(); return cacheManager; } private RedisCacheConfiguration getDefaultRedisCacheConfiguration() { RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig(); // 设置缓存管理器管理的缓存的默认过期时间 defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(cacheConfig.getDefaultCache().getExpireTime())) // 设置 key为string序列化 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // 设置value为json序列化 //.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new ProtostuffRedisSerializer())) // 不缓存空值 //.disableCachingNullValues() ; return defaultCacheConfig; } }
分类:
SpringBoot Cache
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现