SpringBoot中,使用RedisTemplate的几种序列化方式比较

在SpringBoot中使用RedisTemplate,如果不指定序列化的方式,就会导致redis的key及value的可读性变差,所以,我们需要使用序列化的工具类,来序列化和反序列化数据。
注:

1.本文对于数据的key,都是用StringRedisSerializer的序列化方式,保证可读性。
2.使用同一批数据,不同的的序列化方式保存

@SpringBootTest
@RunWith(SpringRunner.class)
public class AuditDataApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        List<Value> list=new ArrayList<>();
        //数据1
        Value value1=new Value();
        value1.setId("1");
        value1.setName("测试名称1");
        value1.setValue("测试值1");

        //数据2
        Value value2=new Value();
        value2.setId("2");
        value2.setName("测试名称2");
        value2.setValue("测试值2");
        list.add(value1);
        list.add(value2);

        redisTemplate.opsForValue().set("test", list);
    }
}

1.JdkSerializationRedisSerializer

优点:序列化后的长度最短,时间适中。
缺点:不是明文显示。

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
       	//采用JdkSerializationRedisSerializer序列化后的长度最短,时间适中,但不是明文显示
        JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
        
        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(jdkSerializationRedisSerializer);
        redisTemplate.setHashValueSerializer(jdkSerializationRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

结果
在这里插入图片描述

2.Jackson2JsonRedisSerializer

优点:序列化速度最快,长度适中
缺点:在使用过程中,timestamp类型的数据以long类型存储,反序列化会出现问题,如果存入redis的数据不存在这种特殊情况,推荐使用这种。

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //采用Jackson2JsonRedisSerializer序列化速度最快,长度适中,
        // 但会使存入redis中timestamp类型的数据以long类型存储,明文显示
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(List.class);

        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

结果
在这里插入图片描述

3.GenericJackson2JsonRedisSerializer

优点:明文显示,在redis中显示了class字段保存有类型的包路径,还会显示字段的类型,反序列化更容易。
缺点:序列化时间最长,长度最大

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //采用GenericJackson2JsonRedisSerializer序列化时间最长,长度最大,明文显示
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

结果
在这里插入图片描述
在这里插入图片描述

总结

对于不同的情况可以使用不同的序列化方式,比较推荐使用JdkSerializationRedisSerializer和Jackson2JsonRedisSerializer,在保证速度的情况下,还能兼顾数据占用大小和明文显示。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 在 Spring Boot 使用 RedisTemplate 存储 hash 类型的数据到 Redis,可以使用以下步骤: 1. 在 pom.xml 文件添加 Redis 的依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在 application.properties 或 application.yml 配置 Redis 连接信息: ``` spring.redis.host=your_redis_host spring.redis.port=your_redis_port ``` 3. 在需要使用 Redis 的类注入 RedisTemplate 对象: ``` @Autowired private RedisTemplate<String, Object> redisTemplate; ``` 4. 使用 redisTemplate 的 hash 相关方法来存储数据,如 hset()、hget()、hdel() 等。 示例代码: ``` redisTemplate.opsForHash().put("hashName","key","value"); redisTemplate.opsForHash().get("hashName","key"); ``` 注意: RedisTemplate 默认会使用 JDK 序列化器来序列化对象,如果需要使用 JSON 序列化器,需要在配置类进行配置。 ### 回答2: 在Spring Boot使用RedisTemplate存放hash类型进Redis,我们需要进行以下步骤: 1. 配置RedisTemplate 首先,在Spring Boot的配置文件(例如application.properties)配置Redis的连接信息,包括主机地址、端口号、密码等。可以使用以下配置代码: ```java spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=yourpassword ``` 然后,在你的Spring Boot应用程序创建一个RedisTemplate的Bean,并设置相关的Redis连接工厂、Key和Value的序列化方式等配置项。 2. 使用RedisTemplate操作hash类型 在你的代码,注入RedisTemplate,并使用它对Redis的hash类型进行操作。例如,你可以在某个Service类使用RedisTemplate进行hash的存储和获取操作,示例如下: ```java @Service public class RedisHashService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void saveHash(String key, Map<String, Object> hash) { redisTemplate.opsForHash().putAll(key, hash); } public Map<Object, Object> getHash(String key) { return redisTemplate.opsForHash().entries(key); } } ``` 在上述示例,`saveHash`方法使用RedisTemplate的`opsForHash`方法来将一个Map对象保存为hash类型的数据到Redis。`getHash`方法则使用`opsForHash`方法获取指定hash的所有字段和值,返回一个Map对象。 这样,你就可以在Spring Boot使用RedisTemplate存放hash类型进Redis了。通过注入RedisTemplate,并使用其提供的操作方法,你可以方便地进行哈希类型的数据存储和获取操作。 ### 回答3: 在Spring Boot使用RedisTemplate存储hash类型数据到Redis,可以按照以下步骤进行操作: 首先,我们需要在Spring Boot项目引入Redis依赖,在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 接下来需要配置Redis连接信息,可以在application.properties文件添加以下配置: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 ``` 然后,在需要使用Redis的类注入RedisTemplate实例: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; ``` 接下来就可以使用RedisTemplate存储hash类型数据到Redis了。假设我们要存储一个名为"myHash"的hash数据到Redis,可以使用以下代码: ```java String hashKey = "myHash"; String field1 = "field1"; String value1 = "value1"; String field2 = "field2"; String value2 = "value2"; redisTemplate.opsForHash().put(hashKey, field1, value1); redisTemplate.opsForHash().put(hashKey, field2, value2); ``` 可以使用opsForHash()方法获取HashOperations对象,然后调用put()方法将指定字段和对应值存储到hash。 当然,还可以使用其他的方法进行操作,例如获取hash指定字段的值、获取全部字段和值等等。详细的操作可以查看RedisTemplate和HashOperations类的方法。 最后,记得在应用程序关闭时释放Redis连接资源。 以上就是使用RedisTemplate存储hash类型数据到Redis的简要步骤,希望对你有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itfound_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值