栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RedisTemplate操作redis时,可视化工具查看,值前总会有一串“xACxEDx00x05tx00x”

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RedisTemplate操作redis时,可视化工具查看,值前总会有一串“xACxEDx00x05tx00x”

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

一般代码是

@Component
public class RedisUtils {
    @Resource
    private RedisTemplate redisTemplate;

    public void setRedisTemplate(RedisTemplate 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 redisTemplate;

    //public void setRedisTemplate(RedisTemplate redisTemplate) {
    //    this.redisTemplate = redisTemplate;
    //}

    //表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
    @Autowired(required = false)
    public void setRedisTemplate(RedisTemplate 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序列化方式转换】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号