zoukankan      html  css  js  c++  java
  • redis自定义RedisCacheManager

    1.redis自定义配置

    package com.meritdata.cloud.shellmiddleplatform.dataservice.config;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.meritdata.shellmodel.ShellMerchant;
    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.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializationContext;
    
    /**
     * 2020/8/13 4:41 PM
     *
     * @author shoo
     * @describe
     */
    @Configuration
    @EnableCaching
    public class MyRedisCacheConfiguration {
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
    
            Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jacksonSeial.setObjectMapper(om);
    
            //设置默认缓存序列器为json序列化器
            redisTemplate.setDefaultSerializer(jacksonSeial);
            return redisTemplate;
        }
    
        //springboot 2.x 创建方式
        @Bean
        public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
            Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jacksonSeial.setObjectMapper(om);
    
            //配置缓存管理器为json序列化器
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial));
            //使用自定义的配置构建缓存管理器
            RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
            return cacheManager;
        }
    }

    2.用法

     2.1 类上添加注解 @CacheConfig(cacheNames = "shellMerchant")

     2.2 查询方法上添加注解 @Cacheable(key = "#clientId")

     2.3 更新方法上添加注解 @CachePut(key = "#shellMerchant.clientId")

    package com.meritdata.cloud.shellmiddleplatform.dataservice.fourInOne.service.impl;/**
     * 2020/7/2 11:29 AM
     *
     * @author shoo
     * @describe 商户
     *
     */
    @Service
    @CacheConfig(cacheNames = "shellMerchant")
    public class ShellMerchantService implements IShellMerchantService {
    
        @Autowired
        private ShellMerchantRepository shellMerchantRepository;
    
        @Override
        @CachePut(key = "#shellMerchant.clientId")
        public ShellMerchant add(ShellMerchant shellMerchant) {return shellMerchantRepository.save(shellMerchant);
        }
    
        @Override
        @Cacheable(key = "#clientId")
        public ShellMerchant sel(String clientId) {
            return shellMerchantRepository.findByClientId(clientId);
        }
    
        @Override
        @CachePut(key = "#shellMerchant.clientId")
        public ShellMerchant update(ShellMerchant shellMerchant) {
            ShellMerchant merchant = shellMerchantRepository.getById(shellMerchant.getId());
            merchant = shellMerchantRepository.save(merchant);
            return merchant;
        }
    
    }

    3.redis缓存如下

    stay hungry stay foolish!
  • 相关阅读:
    JQuery实现数组移除指定元素
    美团酒旅面经
    搜狗一面
    360面经
    头条面经
    搜狐笔试题
    kolakoski序列
    函数的节流
    隐藏元素的几种方法
    移动端适配与响应式布局
  • 原文地址:https://www.cnblogs.com/shog808/p/13826206.html
Copyright © 2011-2022 走看看