当前位置: 首页 > wzjs >正文

天津市住房和城乡建设委员会官网重庆百度seo公司

天津市住房和城乡建设委员会官网,重庆百度seo公司,怎么做手机版网站,餐饮网站建设背景以下是关于 Spring自定义缓存管理器 的详细说明,包含两种实现方式的对比和代码示例,并附表格总结: 1. 自定义缓存管理器的两种方法 方法1:通过配置文件调整RedisCacheManager 适用场景:简单配置,如修改键…

以下是关于 Spring自定义缓存管理器 的详细说明,包含两种实现方式的对比和代码示例,并附表格总结:


1. 自定义缓存管理器的两种方法

方法1:通过配置文件调整RedisCacheManager

适用场景:简单配置,如修改键前缀、超时时间等。
原理:基于Spring Boot的自动配置,通过修改application.properties参数实现。

方法2:完全自定义代码创建RedisCacheManager

适用场景:复杂自定义(如自定义序列化器、多级缓存、动态配置等)。
原理:通过@Bean显式创建RedisCacheManager实例,完全控制配置。


2. 方法1:通过配置文件消除键前缀并设置超时时间

步骤
  1. 禁用键前缀:设置spring.cache.redis.key-prefix=为空。
  2. 设置全局超时时间:通过spring.cache.redis.time-to-live配置。
配置示例
# application.properties
spring.cache.type=redis
spring.cache.redis.key-prefix= # 禁用前缀
spring.cache.redis.time-to-live=1800000 # 全局超时时间:30分钟
效果
  • 缓存键无前缀(如直接使用user:1001)。
  • 所有缓存项默认过期时间为30分钟。

3. 方法2:完全自定义代码创建RedisCacheManager

步骤
  1. 创建配置类:通过@Bean定义RedisCacheManager
  2. 配置序列化器、超时时间等:使用RedisCacheConfiguration
代码示例
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.*;import java.time.Duration;@Configuration
public class RedisConfig {@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {// 1. 定义缓存配置RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // 键序列化为字符串.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // 值序列化为JSON.entryTtl(Duration.ofMinutes(30)); // 默认超时时间30分钟// 2. 禁用键前缀config = config.prefixCacheNameWithFalse(); // 关键代码:禁用前缀// 3. 创建RedisCacheManagerreturn RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();}
}
关键点
  • 禁用前缀prefixCacheNameWithFalse()
  • 自定义序列化:如StringRedisSerializerGenericJackson2JsonRedisSerializer
  • 动态配置:可为不同缓存设置不同的超时时间(如通过RedisCacheWriter)。

4. 对比表格

方法适用场景配置方式代码示例片段是否支持复杂自定义
配置文件调整简单配置(前缀、超时)修改application.propertiesspring.cache.redis.key-prefix=
自定义代码复杂配置(序列化、多级缓存)通过@Bean显式创建RedisCacheManagerRedisCacheConfiguration config = ...

5. 关键配置参数说明

方法1(配置文件)
参数描述示例值
spring.cache.redis.key-prefix缓存键的全局前缀(设为空禁用)""(禁用前缀)
spring.cache.redis.time-to-live全局缓存过期时间(毫秒)1800000(30分钟)
方法2(代码配置)
参数描述示例值
serializeKeysWith()自定义键的序列化方式StringRedisSerializer
serializeValuesWith()自定义值的序列化方式GenericJackson2JsonRedisSerializer
entryTtl()设置默认超时时间Duration.ofMinutes(30)
prefixCacheNameWith()启用/禁用缓存名称作为前缀(如prefixCacheNameWithFalse()禁用)prefixCacheNameWithFalse()

6. 注意事项

  1. 方法1的局限性

    • 仅能通过有限的配置参数调整(如前缀、超时),无法自定义序列化器或复杂逻辑。
    • 全局配置可能覆盖单个缓存的自定义设置。
  2. 方法2的优势

    • 完全控制配置(如多级缓存、动态超时)。
    • 需要依赖注入RedisConnectionFactoryRedisTemplate
  3. 禁用键前缀的注意事项

    • 确保缓存键唯一,避免不同业务的键冲突。
    • 若需多级缓存,可通过cacheManager(builder -> builder.withCacheConfiguration(...))为不同缓存命名空间设置前缀。

7. 完整代码示例(方法2)

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory factory) {// 1. 定义默认配置RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)).serializeKeysWith(SerializationPair.fromSerializer(new StringRedisSerializer())).serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())).prefixCacheNameWithFalse(); // 禁用前缀// 2. 为特定缓存设置不同配置(可选)config = config.disableCachingNullValues(); // 禁止缓存空值// 3. 创建缓存管理器return RedisCacheManager.builder(factory).cacheDefaults(config).build();}
}

总结

通过上述两种方法,可以灵活控制Redis缓存管理器的配置。对于简单需求,优先使用配置文件调整;对于复杂场景(如自定义序列化、多级缓存),推荐通过代码完全自定义。

http://www.dtcms.com/wzjs/63319.html

相关文章:

  • 网站设计与制作一般步骤东莞seo外包公司哪家好
  • 华为游戏中心百度地图关键词排名优化
  • 舆情分析是什么sem和seo是什么职业
  • 福田网站建设哪家好做什么推广最赚钱
  • 山东有哪些网络公司太原seo快速排名怎么样
  • 如何分享自己的wordpress哈尔滨推广优化公司
  • 文化传媒公司 网站备案网络推广培训去哪里好
  • 做网站从哪里买域名百度公司电话
  • 用Axure做的网站原型百度云seo推广一个月见效
  • 想做个小网站怎么做西安关键词排名软件
  • 中国建设部网站监理延续seo是什么意思 为什么要做seo
  • 手机投资理财网站建设互联网站
  • 网站开发都用什么浏览器百度热搜关键词排名
  • 外贸网站建设信息seo排名点击器曝光行者seo
  • 做非法网站怎么盈利网络推广包括哪些
  • 武汉前端网站开发公司百度优化关键词
  • 长沙建设网站制作网站seo排名培训
  • 河北网站建设制作网络热词排行榜
  • 网站通栏代码百度公司总部在哪里
  • 网站长图怎么做有什么功能
  • 建设银行教育网站手游推广渠道和推广方式
  • 什么网站可以找到防水工程做爱站站长工具
  • 主机开设成功 网站正在建设中seo快速优化排名
  • 做财务还是网站运营长沙网站优化seo
  • asp学习网站网站推广和网络推广
  • 小型企业网站建设公司seo页面代码优化
  • 同ip网站做友链长沙网站seo优化排名
  • 电商网站建设机构外链网盘系统
  • 深圳网站设计哪家好seo搜索引擎优化期末考试
  • 广州协安建设工程有限公司网站深圳推广平台有哪些