首页 > 数据库 >RedisConfig.java--开启缓存支持,配置RedisTemplate,缓存到java虚拟机而非Redis,redis支持缓存过期时间,redis指定缓存超时时间

RedisConfig.java--开启缓存支持,配置RedisTemplate,缓存到java虚拟机而非Redis,redis支持缓存过期时间,redis指定缓存超时时间

时间:2022-11-24 19:43:01浏览次数:49  
标签:om 缓存 java Object redis return new redisTemplate


@Configuration
@EnableCaching //开启缓存支持
public class RedisConfig extends CachingConfigurerSupport{
@Resource
private LettuceConnectionFactory lettuceConnectionFactory;

//@description 自定义的缓存key的生成策略,若想使用这个key 只需要将注解上keyGenerator的值设置为keyGenerator即可
@Override
@Bean
public KeyGenerator keyGenerator(){
return new KeyGenetator(){
@Override
public Object generate(Object target,Method method,Object... params){
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());
sb.append(method.getName());
for(Object obj: params){
sb.append(obj.toString());
}
return sb.toString();
}
};
}
//RedisTemplate配置
@Beam
public RedisTemplate<String,Obejct> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){
//设置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL,Visiblety.ANY);
om.enableDefaultTyping(DefaultTyping.NON_FINAL);
jsckson2JsonRedisSerializer.setObjectMapper(om);
//配置redisTemplate
ReidsTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(LettuceConnectionFactory);
RedisSerializer<?> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(StringSerializer);//key序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); //value序列化
redisTemplate.setHashKeySerializer(stringSerializer);//Hash key序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); //hash value 序列化
return redisTemplate;
}
//此处的缓存到java虚拟机内存,非redis
@Override
@Bean
public CacheManager cacheManager(){
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<ConcurrentMapCache> list = new ArrayList<>();
list.add(new ConcurrentMapCache(name:"dictCache"));
list.add(new ConcurrentMapCache(name:"jeecgDemo"));
list.add(new ConcurrentMapCache(name:"permission"));
cacheManager.setCaches(list);
cacheManager.afterPropertiesSet();
return cacheManager;
}
//redis缓存支持设置缓存过期事件
@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory){
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTt1(second:3600),//3600秒,默认策略,未配置的key会使用这个
this.getRdisCacheConfigurationMap() //指定key 策略
);
}
//指定redis缓存超时时间
private Map<String,RedisChcheConfiguration> getRedisCacheConfigruationMap(){
Map<Stirng,RedisCacheConfiguration> redisCacheConfigurationMap = new
HashMap<>();
redisCacheConfigurationMap.put("dictTableCache",this.getRedisCacheConfigurationWithTt1(seconds:600));//600秒表数据字典只缓存10分钟
return redisCacheConfigurationMap;
}
private RedisCacheConfiguration getRedisCacheConfigurationWithTt1(Integet seconds){
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);

RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofSeconds(seconds));
return redisCacheConfiguration;
}

}

记事本纯手写,应该有很多不对的地方;

标签:om,缓存,java,Object,redis,return,new,redisTemplate
From: https://blog.51cto.com/u_15890333/5884590

相关文章

  • java23种设计模式概述总结
    软件设计模式的意义:它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠......
  • java+pgsql实现保存图片到数据库,以及读取数据库存储的图片;java将图片保存到本地、保存
    java将图片保存到本地;pom.xml<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.7</version></dependency><de......
  • Java——多线程:Lamda表达式
    多线程理解继承Thread类子类继承Thread类具备多线程能力启动线程:子类对象.start()不建议使用:避免oop单继承局限性实现Runnable接口实现接口Runnable具有多......
  • Vue切换页面保存缓存数据或文件的两种方式
    功能描述:   在一个大的父组件中,根据tab页面的v-if进行切面的切换,但是v-if的切换会造成组件的销毁,再切换回去输入的数据或者上传的文件就没有了,所以切换页面不能让tab......
  • windows下Redis安装
    1.下载编译https://github.com/mythz/redis-windows需要下载后,自己编译生成exe文件选择已经打包好的zip包使用2.运行2.1运行服务器端D:\Code\Redis>redis-server.e......
  • Java使用Redis
    1.下载jedis.jar2.四个数据类型以及键操作publicclassRedisTest{publicstaticvoidmain(String[]args)throwsInterruptedException{RedisTes......
  • java后端构造树结构列表的方法,前端一次请求,后端全部返回;
    目的:构造部门上下级部门树列表,在业务层构建树结构,返回给前端,减少前端工作量。方式DeptVo.javapackagecom.pshdhx.treebuild;importjava.util.ArrayList;importjava.util.......
  • 【Java】将枚举类转换为Redis字典缓存
     字典翻译框架实现看这篇:https://www.cnblogs.com/mindzone/p/16890632.html枚举的特性首先是枚举的一些特性:1、枚举实例直接在枚举类中声明2、重载构造器,......
  • Java 集合 - 总结
    介绍Java集合类是数据结构的实现,这些类用来存储和操作对象。常见接口1、Collection:最基本的集合接口,存储一组不唯一,无序的对象。2、List:继承Collection接口,存储一组......
  • redis配置说明
    ##################################INCLUDES####################################包含的其他配置:主要用于多个实例时,共同部分的模板化#include/path/to/local.c......