SpringBoot2.3整合redis缓存自定义序列化的实现

网友投稿 783 2023-05-02

SpringBoot2.3整合redis缓存自定义序列化的实现

SpringBoot2.3整合redis缓存自定义序列化的实现

1.引言

我们使用redis作为缓存中间件时,当我们第一次查询数据的时候,是去数据库查询,然后查到的数据封装到实体类中,实体类会被序列化存入缓存中,当第二次查数据时,会直接去缓存中查找被序列化的数据,然后反序列化被我们获取。我们在缓存中看到的序列化数据不直观,如果想看到类似json的数据格式,就需要自定义序列化规则。

2.整合redis

pom.xml:

org.springframework.data

spring-data-redis

2.3.0.RELEASE

redis.clients

jedis

application.yml:

spring:

redis:

host: 192.168.85.130

port: 6379

database: 0

springboot主配置类要加上@EnableCaching注解

3.自定义序列化

@Configuration

public class MyRedisConfig {

@Bean

public RedisTemplate empRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {

RedisTemplate template = new RedisTemplate<>();

template.setConnectionFactory(redisConnectionFactory);

Jackson2JsonRedisSerializer(Object.class);

template.setDefaultSerializer(serializer);

return template;

}

@Bean

public CacheManager cacheManager(RedisConnectionFactory factory){

RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()

.entryTtl(Duration.ofDays(1))

.disableCachingNullValues()

.serializeKeysWith(RedisSerializationContext.SerializationPair

.fromSerializer(new StringRedisSerializer()))

.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));

return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();}

}

4.测试

DeptService:

@Service

public class DeptService {

@Autowired

DepartmentMapper departmentMapper;

@Cacheable(value = "dept")

public Department findById(Integer id){

System.out.println("查询"+id+"号部门");

Department department = departmentMapper.getDeptById(id);

return department;

}

}

EmployeeServiceJpznooZdr:

@Service

public class EmployeeService {

@Autowired

EmployeeMapper employeeMapper;

@Cacheable(value = "emp")

public Employee findById(Integer id){

System.out.println("查询"+id+"号员工");

Employee employee = employeeMapper.getEmpById(id);

return employee;

}

}

@Cacheable(value = “dept”) :该注解在方法上,方法传入参数默认为key值,方法返回值为value值,注解的参数value = "dept"是缓存的名子

结果:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Springboot2.3访问本地路径下静态资源的方法(解决报错:Not allowed to load local resource)
下一篇:面试官:怎么做JDK8的垃圾收集器的调优(面试常问)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~