SpringCache缓存自定义配置的示例分析
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关SpringCache缓存自定义配置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Cacheable指定自定义属性详情请参考s
千家信息网最后更新 2025年01月19日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 ListgetTopCategorys() { 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 ListgetTopCategorys() { 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 ListgetTopCategorys() { 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安全错误
数据库的锁怎样保障安全
数据库员工管理系统实验报告
数据库时间表格转换
锦华嘉园软件开发
2022数据库市场占有率
网络安全中三分技术七分管理
银行软件开发岗位有没有存贷款
oracle数据库的配置
工厂网络安全宣传稿件
晶樵网络技术有限公司
放映机服务器一直响
平面设计能转软件开发吗
网络安全问题的相关知识
网络安全实习生的岗位
网络技术免费网站
网络安全法是几几年实施的
软件开发中什么是脚本
中国网络安全大会王冰
冀州市网络安全宣传周
前端数据库代码
斗蟋蟀视频软件开发
部门网络安全管理规定
专业批发服务器
数据库查不到防伪码
网络安全讲话稿初中生
正确网络安全观的基本路径
秀逗互联网科技有限公司
网络安全管理目标的主要内容
蒂森电梯蓝牙服务器制作
服务器不安全
软件开发测试抑郁症的表现