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) { RedisTemplateredisTemplate = 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缓存如下