博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot2.x整合Redis缓存自定义序列化
阅读量:4972 次
发布时间:2019-06-12

本文共 4774 字,大约阅读时间需要 15 分钟。

一、导入Jar包

org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-start-cache

 

二、配置文件

package com.liangjian.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;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;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/** * reids配置类 */@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport{    @Bean    public RedisTemplate
redisTemplate(RedisConnectionFactory factory) { RedisTemplate
redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置value的序列化规则和 key的序列化规则 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer
redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer 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); // 配置序列化(解决乱码的问题),过期时间30秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(1800000)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; }}

 

 

三、application.yml 添加以下配置

spring:## Redis 配置## Redis数据库索引(默认为0)  redis:    database: 0  ## Redis服务器地址    host: 127.0.0.1  ## Redis服务器连接端口    port: 6379  ## Redis服务器连接密码(默认为空)    password:  ## 连接超时时间(毫秒)   # timeout: 1800000  ## 连接池最大连接数(使用负值表示没有限制)    jedis:      pool:        max-active: 8  ## 连接池最大阻塞等待时间(使用负值表示没有限制)        max-wait: -1  ## 连接池中的最大空闲连接        max-idle: 8  ## 连接池中的最小空闲连接        min-idle: 0

 

四、在方法上使用@Cacheable(value = "MyRedis"/*上一级包名*/, key = "redis")进行添加缓存

(方法必须有返回值,返回值就是存入Redis的数据)

 

五、删除缓存:

  方法一:删除指定Key

 

@Caching(evict = {
@CacheEvict(value = "MyRedis",key=“redis”) }) 方法二:删除指定文件下(value值)所有的Key

 

@Caching(evict = {
@CacheEvict(value = "MyRedis",allEntries=true/*表示删除MyRedis文件下所有的缓存*/) }) 六、有时候通过注解方式无法满足需求,可以使用RedisTemplate对象进行存储,关键代码如下:
//获取redisTemplate对象 @Autowired private RedisTemplate redisTemplate;//新增 参数分别为:Key名、存入的数据、过期时间、过期时间的类型(TimeUnit.SECONDS 是以秒计算)redisTemplate.opsForValue().set(“token”,admins,1800, TimeUnit.SECONDS); //获取 参数:Key值
redisTemplate.opsForValue().get(“token”) //删除 参数:Key值
redisTemplate.delete("token");
 

 

 

转载于:https://www.cnblogs.com/castlechen/p/11090505.html

你可能感兴趣的文章
EBS R12 查询EBS用户相关SQL
查看>>
推荐阅读
查看>>
微信支付
查看>>
fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
查看>>
XCTF-upload
查看>>
三步学会解决VS生成配置问题
查看>>
AtCoder Beginner Contest 121 题解
查看>>
Redis热点问题发现及通用解决方案
查看>>
Android之网络开发详解
查看>>
*Bash:如何用bash 转义 URL里的特殊字符,让其在sed不会产生歧义?
查看>>
IT笔面试题
查看>>
[CTSC2012]熟悉的文章 后缀自动机
查看>>
纯手工打造[博客园-博文数据分析]及技术分享(java)
查看>>
POJ 1961 KMP
查看>>
移动web资源整理
查看>>
ODBC, OLEDB, ADO, ADO.Net的演化简史
查看>>
如何实现div的高度100%填充
查看>>
计算机的分类
查看>>
探索c#之一致性Hash详解
查看>>
android 到底是什么决定了app的名称 application label activity label
查看>>