1.Redis的序列化

本文介绍了RedisTemplate的序列化原理,指出默认使用JdkSerializationRedisSerializer进行对象与二进制数据的转换。文章通过SpringBoot项目演示了配置Redis的相关步骤,并测试了不同类型的RedisSerializer,如FastJsonRedisSerializer、GenericFastJsonRedisSerializer和GenericJackson2JsonRedisSerializer,强调了选择序列化器应根据实际业务需求来决定。
摘要由CSDN通过智能技术生成
  • 首先看一下RedisTemplate的源码注释:
    在这里插入图片描述
    在这里主要说4件:
    (1)在给定对象和Redis存储中的基础二进制数据之间执行自动序列化/反序列化。默认情况下,它对其对象使用Java序列化(JdkSerializationRedisSerializer)。对于字符串密集型操作,请考虑使用专用的{StringRedisTemplate}。
    (2)中央方法是execute,它支持实现{ RedisCallback}接口的Redis访问代码。它提供{RedisConnection}处理,这样{ RedisCallback}实现就调用代码都不需要关心获取、关闭Redis连接或处理Connection生命周期异常。
    (3)一旦配置,该类是线程安全的。
    (4)在生成redisTemplate后,将由序列化器/反序列化器正确的对对象与二进制数据进行相互转换。
  • 先看一下redisTemplate默认的序列化器JdkSerializationRedisSerializer对数据进行序列化后的结果
    建立一个SpringBoot项目引入Redis倚赖:
  		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

在application.yml中配置redis相关属性(地址,端口,连接池等信息)

 spring:
   redis:
    port: 6379
    host: 127.0.0.1
    database: 0
    jedis:
      pool:
        max-active: 10
        max-idle: 5
        min-idle: 3
        max-wait: 1000D

接下里就可以进行操作redis,编写测试用例:

在配置RedisTemplate时,可以设置相应的序列化器来对存储在Redis中的数据进行序列化和反序列化。下面是一个示例配置,使用Jackson2JsonRedisSerializer作为序列化器: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置键的序列化redisTemplate.setKeySerializer(new StringRedisSerializer()); // 设置值的序列化器 Jackson2JsonRedisSerializer<Object> 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); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); return redisTemplate; } } ``` 在上述配置中,我们使用了StringRedisSerializer作为键的序列化器,将键序列化为字符串。对于值的序列化器,我们使用Jackson2JsonRedisSerializer,它将对象序列化为JSON格式存储在Redis中。 注意:在使用Jackson2JsonRedisSerializer时,需要配置ObjectMapper,以便正确地进行对象的序列化和反序列化。上述示例中的ObjectMapper配置启用了默认的类型信息,以便正确地反序列化对象。 通过以上配置,RedisTemplate将使用指定的序列化器对数据进行序列化和反序列化。你可以根据实际需求,选择合适的序列化器和配置方式。 希望以上信息对你有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值