springboot 配合多个cachemanager
2024-10-07 01:49:00
springboot集成 redis
需要引入
官方推进用lettuce连接池,Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的
@Configuration
public class EhcacheConfig { public interface CacheManagerNames {
String REDIS_CACHE_MANAGER = "redisCacheManager";
String EHCACHE_CACHE_MANAGER = "ehCacheManager";
} @Bean(name = CacheManagerNames.REDIS_CACHE_MANAGER)
public RedisCacheManager redisCacheManager(RedisConnectionFactory factory) {
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofDays(30));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(factory))
.cacheDefaults(configuration).build(); } @Bean
public EhCacheManagerFactoryBean cacheManagerFactoryBean(){
EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean();
bean.setConfigLocation(new ClassPathResource("ehcache.xml"));
bean.setShared(true);
return bean;
}
/**
* @Description @Primary 设置默认加载manager
* @param bean
* @return org.springframework.cache.ehcache.EhCacheCacheManager
* @date 2019/5/31 4:38 PM
* @auther lixin
*/
@Bean(name = CacheManagerNames.EHCACHE_CACHE_MANAGER)
@Primary
public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){
return new EhCacheCacheManager(bean.getObject());
} /**
* @Description 自定义缓存 key规则
* @return org.springframework.cache.interceptor.KeyGenerator
* @date 2019/5/31 4:38 PM
* @auther lixin
*/
@Bean
public KeyGenerator keyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
// 由于参数可能不同, hashCode肯定不一样, 缓存的key也需要不一样
sb.append(JSON.toJSONString(obj).hashCode());
}
return sb.toString();
};
} /**
* 设置 redis 数据默认过期时间,默认1天
* 设置@cacheable 序列化方式
* @return
*/
@Bean
public RedisCacheConfiguration redisCacheConfiguration(){
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofDays(1));
return configuration;
}
}
序列化 需要自定义
FastJsonRedisSerializer 类
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> { public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private Class<T> clazz; public FastJsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz;
} @Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
} @Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return (T) JSON.parseObject(str, clazz);
} }
最新文章
- 文法分类的python实现
- 在RHEL6p5中设置网卡
- Android课程---首学开发
- iOS开发小技巧--利用运行时得到隐藏的成员变量
- lmdb简介——结合MVCC的B+树嵌入式数据库
- AspNet上传文件的几个控件
- AutoLayout UITableViewCell 动态高度
- Linux基础(二)
- python turtle,random,math
- hdu 1811 Rank of Tetris
- PLSQL在cmd命令行中的基本用法
- OpenJudge Trans
- HDU - 2802 F(N) (周期)
- VS2017 启动调试报错:ID为{....}进程未启动解决方案
- NB群友
- Unity3D中利用Action实现自己的消息管理(订阅/发布)类
- BZOJ2872 : 优莱卡
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
- 声明元素<;%! %>;、Scriptlet元素<;% %>;、表达式元素<;%= %>;、注释元素、输出特殊符号<;%和%>;
- kettle性能优化
热门文章
- 微信小程序支持windows PC版了
- 自定义组合控件SettingItemView的简单实现
- 阶段3 3.SpringMVC&#183;_05.文件上传_1 文件上传之上传原理分析和搭建环境
- systemctl stop 列表
- django 模板里面for循环和if常用的方法
- ubuntu下自动获取ip设置
- CTF—攻防练习之HTTP—暴力破解
- Android开发 互相调用模式之提供扩展类
- 华为HCNA乱学Round 6:PVID,TAG,TRUNK
- 【Linux开发】linux设备驱动归纳总结(七):2.内核定时器