RedisConfig.java--キャッシュサポートを有効にし、RedisTemplateを構成し、Redisの代わりにjava仮想マシンにキャッシュし、redisはキャッシュの有効期限をサポートし、redisはキャッシュのタイムアウト時間を指定します

@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 RedisCachaManager redisCacheManager(RedisConnectionFactory redisConnectionFactory){
        return new RedisCacheManager(
           RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
           this.getRedisCacheConfigurationWithTt1(second:3600),//3600秒,默认策略,未配置的key会使用这个
            this.getRdisCacheConfigurationMap() //指定key 策略
         );
    }
    //指定redis缓存超时时间
    private Map<String,RedisChcheConfiguration> getRedisCachaConfigruationMap(){
        Map<Stirng,RedisCacheConfiguration> redisCacheConfigurationMap = new
        HashMap<>();
        redisCacheConfigurationMap.put("dictTableCache",this.getRedisCacheConfigurationWithTt1(seconds:600));//600秒表数据字典只缓存10分钟
        return redisCacheConfigurationMap;
    }
    private RedisCachaConfiguration 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);
            
            RedisCachaConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
            redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofSeconds(seconds));
            return redisCacheConfiguration; 
    }

}

メモ帳は純粋に手書きであり、多くの問題があるはずです。

おすすめ

転載: blog.csdn.net/pshdhx/article/details/108052373