RedisTemplate操作redis时,可视化工具查看,值前总会有一串“\xAC\xED\x00\x05t\x00\x”

1.简单描述

  1. RedisTemplate是spring对Redis的封装, StringRedisTemplate 继承 RedisTemplate
  2. StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
  3. RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

一般代码是

@Component
public class RedisUtils {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { //默认JdkSerializationRedisSerializer
        this.redisTemplate = redisTemplate;
    }
}

可视化工具查看是如下
在这里插入图片描述

2.问题描述与解决

如上,查看时乱码。
在用Spring data 的RedisTemplate查询一个hash,输入正确的key,却不能查出来数据。
于是尝试往redis里存一个简单的KV键值对,redis客户端get key发现找不到key。
使用命令keys *查询了下发现存入的值变乱码了。

这时候我们需要修改RedisTemplate的序列化策略。 但是注意一点,由于采用了String的序列化策略,所以只接受value值类型为String的参数

//key序列化方式改成StringRedisSerializer
//value序列化方式改为Jackson2JsonRedisSerializer

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtils {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    //public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
    //    this.redisTemplate = redisTemplate;
    //}

    //表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
    @Autowired(required = false)
    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
        RedisSerializer stringSerializer = new StringRedisSerializer(); //序列化为String
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //序列化为Json
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        this.redisTemplate = redisTemplate;
    }
 }

此时可视化工具如下
在这里插入图片描述
相关链接

https://blog.csdn.net/weixin_45941687/article/details/121203342
【RedisTemplate序列化方式转换】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值