package cache.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
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;
/**
* ClassName: RedisConfig
* Package:cache.config
* Description:
* Redis序列化
* redis需要序列化是因为其底层是基于内存的,而内存中存储的数据必须以二进制的形式表示。
* 当需要将某个对象保存到Redis中或从Redis中取出时,需要将该对象进行序列化(
* 即将其转换成字符串或二进制数据),使其可以在Redis中进行存储和传输。在Redis中,
* 常用的序列化方式有字符串序列化、JSON序列化、MessagePack序列化等。
* 不同的序列化方式对于不同的应用场景具有不同的优劣势,
* 开发者需要根据自己的实际情况选择合适的序列化方式。
* @Date:2024/5/7 13:25
* @Author: twx
*/
@Configuration
@SuppressWarnings("all")
public class RedisConfig {
/**
* 定制Redis API模板RedisTemplate
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
// 使用JSON格式序列化对象,对缓存数据key和value进行转换
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
// 解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 设置RedisTemplate模板API的序列化方式为JSON
template.setDefaultSerializer(jacksonSeial);
return template;
}
/**
* 定制Redis缓存管理器RedisCacheManager,实现自定义序列化并设置缓存时效
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 分别创建String和JSON格式序列化对象,对缓存数据key和value进行转换
RedisSerializer<String> strSerializer = new StringRedisSerializer();
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);
// 定制缓存数据序列化方式及时效
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1)) // 设置缓存有效期为1天
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(strSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial))
.disableCachingNullValues(); // 对空数据不进行缓存
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
return cacheManager;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
cache_dome.rar (31个子文件)
cache_dome
pom.xml 2KB
src
test
java
main
resources
application.yml 644B
java
cache
mapper
ProvinceMapper.java 364B
CityMapper.java 349B
controller
ProvinceController.java 1KB
CityController.java 908B
RedisController.java 1002B
CacheDomeApplication.java 556B
service
ProviceService.java 314B
imple
CityImple.java 477B
ProvinceImple.java 506B
CityService.java 300B
entity
City.java 268B
Province.java 253B
config
RedisConfig.java 4KB
geography.sql 2KB
target
classes
cache
mapper
ProvinceMapper.class 373B
CityMapper.class 361B
controller
ProvinceController.class 2KB
RedisController.class 2KB
CityController.class 1KB
CacheDomeApplication.class 785B
service
imple
CityImple.class 608B
ProvinceImple.class 634B
CityService.class 291B
ProviceService.class 301B
entity
Province.class 2KB
City.class 2KB
config
RedisConfig.class 5KB
application.yml 644B
generated-sources
annotations
cache_dome.iml 11KB
共 31 条
- 1
资源评论
twx95
- 粉丝: 367
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功