SpringCache缓存自定义配置的示例分析
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章将为大家详细讲解有关SpringCache缓存自定义配置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Cacheable指定自定义属性详情请参考s
千家信息网最后更新 2025年11月10日SpringCache缓存自定义配置的示例分析
这篇文章将为大家详细讲解有关SpringCache缓存自定义配置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Cacheable指定自定义属性
详情请参考spring官网添加链接描述
1.key的名字和TTL时间
/** * 查询所有1级分类 * @Cacheable代表当前方法的结果需要缓存,若缓存中有则方法不会调用,若缓存中没有会调用方法并将结果放入缓存 * 缓存默认行为: * a.若缓存中有则方法不会被调用 * b.key默认自动生成,缓存的名字::SimpleKey [] (自动生成的key值) * c.缓存的value值,默认使用jdk序列化机制,将序列化后的数据存到redis * d.默认ttl时间为-1 * @return */@Cacheable(value = {"category"},key ="'TopCategorys'" )@Overridepublic List getTopCategorys() { System.out.println(".....getTopCategorys.........."); long startTime = System.currentTimeMillis(); List categoryEntityList = this.baseMapper.selectList( new QueryWrapper().eq("parent_cid", 0)); System.out.println("消耗时间:" + (System.currentTimeMillis() - startTime)); return categoryEntityList;} /** * 查询所有1级分类 * @Cacheable代表当前方法的结果需要缓存,若缓存中有则方法不会调用,若缓存中没有会调用方法并将结果放入缓存 * 缓存默认行为: * a.若缓存中有则方法不会被调用 * b.key默认自动生成,缓存的名字::SimpleKey [] (自动生成的key值) * c.缓存的value值,默认使用jdk序列化机制,将序列化后的数据存到redis * d.默认ttl时间为-1 * @return */ // @Cacheable(value = {"category"},key ="'TopCategorys'" ) @Cacheable(value = {"category"},key ="#root.method.name" ) @Override public List getTopCategorys() { System.out.println(".....getTopCategorys.........."); long startTime = System.currentTimeMillis(); List categoryEntityList = this.baseMapper.selectList( new QueryWrapper().eq("parent_cid", 0)); System.out.println("消耗时间:" + (System.currentTimeMillis() - startTime)); return categoryEntityList; } 2.缓存数据保存为json格式
* 原理:
* CacheAutoConfiguration(selectImports方法)--->CacheConfigurations(MAPPINGS)
* --->RedisCacheConfiguration-->cacheManager方法--->RedisCacheManager初始化所有的缓存(determineConfiguration方法
* 每个缓存决定使用什么配置) --->createConfiguration方法
在config包下新建MyCacheConfig配置类
package com.atguigu.gulimall.product.config;import org.springframework.boot.autoconfigure.cache.CacheProperties;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.RedisSerializationContext;import org.springframework.data.redis.serializer.StringRedisSerializer;/** * 缓存配置 * @author zfh * @email hst1406959716@163.com * @date 2021-12-25 09:40:46 */@EnableCaching@Configurationpublic class MyCacheConfig { @Bean RedisCacheConfiguration redisCacheConfiguration(){ RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // config = config.entryTtl(); config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); return config; }}发现ttl变成了-1,我们的application.properties没起作用
package com.atguigu.gulimall.product.config;import org.springframework.boot.autoconfigure.cache.CacheProperties;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.RedisSerializationContext;import org.springframework.data.redis.serializer.StringRedisSerializer;/** * 缓存配置 * @author zfh * @email hst1406959716@163.com * @date 2021-12-25 09:40:46 */@EnableConfigurationProperties(CacheProperties.class)@EnableCaching@Configurationpublic class MyCacheConfig { @Bean RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){ RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // config = config.entryTtl(); config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); CacheProperties.Redis redisProperties = cacheProperties.getRedis(); //将配置文件中所有的配置都生效 if (redisProperties.getTimeToLive() != null) { config = config.entryTtl(redisProperties.getTimeToLive()); } if (redisProperties.getKeyPrefix() != null) { config = config.prefixKeysWith(redisProperties.getKeyPrefix()); } if (!redisProperties.isCacheNullValues()) { config = config.disableCachingNullValues(); } if (!redisProperties.isUseKeyPrefix()) { config = config.disableKeyPrefix(); } return config; }}3.使用缓存前缀
在application.properties文件中
spring.cache.type=redis#spring.cache.cache-names=qq#TTL 毫秒为单位spring.cache.redis.time-to-live=3600000#如果指定了前缀就用我们指定的前缀,如果没有就默认使用缓存的名字作为前缀spring.cache.redis.key-prefix=CACHE_spring.cache.redis.use-key-prefix=true
4.缓存null,防止缓存穿透
在application.properties文件中
spring.cache.type=redis#spring.cache.cache-names=qq#TTL 毫秒为单位spring.cache.redis.time-to-live=3600000#如果指定了前缀就用我们指定的前缀,如果没有就默认使用缓存的名字作为前缀spring.cache.redis.key-prefix=CACHE_spring.cache.redis.use-key-prefix=true#是否缓存空值,防止缓存穿透spring.cache.redis.cache-null-values=true
代码中直接返回null
/** * 查询所有1级分类 * @Cacheable代表当前方法的结果需要缓存,若缓存中有则方法不会调用,若缓存中没有会调用方法并将结果放入缓存 * 缓存默认行为: * a.若缓存中有则方法不会被调用 * b.key默认自动生成,缓存的名字::SimpleKey [] (自动生成的key值) * c.缓存的value值,默认使用jdk序列化机制,将序列化后的数据存到redis * d.默认ttl时间为-1 * * 原理: * CacheAutoConfiguration(selectImports方法)--->CacheConfigurations(MAPPINGS) * --->RedisCacheConfiguration-->cacheManager方法--->RedisCacheManager初始化所有的缓存(determineConfiguration方法 * 每个缓存决定使用什么配置) --->createConfiguration方法 * @return */ // @Cacheable(value = {"category"},key ="'TopCategorys'" ) @Cacheable(value = {"category"},key ="#root.method.name" ) @Override public List getTopCategorys() { System.out.println(".....getTopCategorys.........."); long startTime = System.currentTimeMillis(); List categoryEntityList = this.baseMapper.selectList( new QueryWrapper().eq("parent_cid", 0)); System.out.println("消耗时间:" + (System.currentTimeMillis() - startTime));// return categoryEntityList; return null; } 关于"SpringCache缓存自定义配置的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
缓存
方法
配置
前缀
时间
名字
序列
结果
自动生成
生成
数据
代表
文件
机制
篇文章
行为
a.
c.
d.
并将
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库备份设置密码
wifi远端服务器连接不上网
软件开发的技术认定找哪里
山东服务器电源生产公司
哪些数据库需要花钱
世界网络安全资讯网站
电脑远程服务器登录不了
揭阳网络技术怎么代理
小学二年级网络安全教育
网络安全组群号大全
互联网发展及网络安全
河北超频服务器厂家供应
什么是系统人软件开发
水务网络安全建设方案
创建vpn服务器
2008服务器激活
网络安全标准坚持急用先行的事例
腾讯云服务器网站过几天就打不开
数据库 主键自增长代码
网络安全对抗应急演练
焦作大学软件开发
嵌入式软件开发区烧烤炉
河南服务器电源厂家排名
wps图片数据库
clion 服务器
数据库cdc
郑州杭州东信网络技术有限公司
云数据库开发者
与数据库相关的服务
网络安全标准坚持急用先行的事例