解决redis的key和value出现乱码(更准确的说是二进制形式)

这篇具有很好参考价值的文章主要介绍了解决redis的key和value出现乱码(更准确的说是二进制形式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

redis执行代码时key和value会以乱码(二进制形式)存储,更准确的说不是乱码,只是redis以二进制的方式存储,这种方式不方便用可视化的redis管理工具查看,所以我们需要将它序列化

redis value乱码,redis,缓存,java


原因分析:

这是因为在redis储存的时候没有对key和value进行序列化,默认情况下的模板RedisTemplate<Object, Object>,默认序列化使用的是 JdkSerializationRedisSerializer ,存储二进制字节码。这时需要自定义模板。


解决方案:

1、自定义RedisTemplate模板(redis的key需序列化,value可以不序列化)

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //设置String类型的key设置序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        //设置Hash类型的key设置序列化器
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        //设置redis链接Lettuce工厂
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        return redisTemplate;
    }
}

当然也可以对value进行序列化,至于为什么不对value序列化等下再作出解释

2、注入模板,执行代码

@Autowired
private RedisTemplate redisTemplate;
@Test
void test(){
    ValueOperations ops = redisTemplate.opsForValue();
    ops.set("name","YHJ");
}

3、结果如下

redis value乱码,redis,缓存,java

Value还是以二进制的形式存进去,这是因为我们没有对value进行序列化,虽然value的格式有点难看,但是这样也可以正常取出来,因为在java代码取value值的时候,还会进行反序列化,不会影响业务的逻辑和数据的正确性,结果如下:

redis value乱码,redis,缓存,java

 4、我们为什么不对value进行序列化呢

这是因为redis的value最好不要设置String序列化,若设置序列化了,value只能存入String类型,不能存进LocalDateTime、LocalDate、LocalTime等时间类型(若想存这些类型也是可以的,需要将这些数据强转为string类型再存进value里即可),通常开发中我们是不需要查看value的,只需要查看key。

若想value也序列化的话就是用这配置,但是记得若将值存进value的话最好还是要保证要存进去的值是String类型文章来源地址https://www.toymoban.com/news/detail-520182.html

/**
 * Redis配置类,设置序列化
 */
@Configuration
public class RedisConfig {

    /**
     * 设置序列化
     *
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        // String类型 key序列器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // String类型 value序列器
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        // Hash类型 key序列器
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // Hash类型 value序列器
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        // 把连接工厂放进去
        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

到了这里,关于解决redis的key和value出现乱码(更准确的说是二进制形式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Sublime出现中文乱码的情况

    目录 前言 一、安装Package Control插件 二、安装ConvertToUTF8插件 三、解决中文乱码问题 总结 Sublime Text中出现中文乱码问题可以通过安装ConvertToUTF8插件来解决。 以下是具体步骤:  打开Sublime Text,依次点击菜单栏的Tools - Install Package Control。  依次点击菜单栏的Preferences - Packag

    2024年02月11日
    浏览(50)
  • VSCode终端出现乱码的解决方法

    VSCode终端调用的是cmd.exe,使用中文出现乱码时,需要解决cmd的编码设置。 可以通过chcp命令来查看当前cmd的编码设置 GBK2312的编码是936 UTF8的编码是65001 出现乱码的原因 :计算机中的01序列没有按照数据输入的编码规则读出,即 输入编码集和输出编码集不一致 。 比如以国标码

    2023年04月08日
    浏览(33)
  • windows 解压文件出现乱码 7zip解压文件中文乱码 解决方法

    按照如下教程,更改windows默认编码格式为utf-8之后。 https://blog.csdn.net/qq_43780850/article/details/129122210 解压文件时,文件中的中文出现乱码。原因是压缩文件的格式为GBK,而我将windows平台的默认编码改成了UTF-8,导致解压出现乱码。此时只需要按照上面的教程,取消勾选utf-8支持

    2024年02月13日
    浏览(39)
  • ArcMap属性表出现乱码情况的解决

      本文介绍 ArcMap 软件打开图层的 属性表 后,出现字段中 汉字乱码 情况的解决方法。   有时在使用 ArcMap 软件时,会发现一些图层的属性表中,原本应该是中文的字段却出现乱码的情况;如下图所示,其中 NAME99 一栏应该是图层中各个要素对应的汉语名称,但却出现了

    2024年02月08日
    浏览(29)
  • pytest+allure运行出现乱码的解决方法

    报错截图: 这里的截图摘自 悟翠人生 小伙伴的https://blog.csdn.net/weixin_45435918/article/details/107601721一文。 这是因为没有安装allure运行环境或者没有配置allure的环境变量导致,解决方案: 1.安装allure运行环境 官方下载地址:https://github.com/allure-framework/allure2/releases 百度网盘链接

    2024年02月15日
    浏览(27)
  • 关于Nginx代理目录出现乱码问题的解决

    使用Nginx做目录代理的时候,中文命名的文件在前端出现乱码问题。 我的nginx代理配置如下: 保存配置重启Nginx,然后访问服务器的3370端口,包含中文命名的文件在前端页面显示乱码,如下: 初步推测是编码方式出现问题。 手动指定nginx在该server下的字符编码格式即可。 即

    2024年02月15日
    浏览(30)
  • 用VSCode打开文件出现中文乱码的解决办法

    在使用VScode过程中,用其他编辑器写好的文件通过VSCode打开,如果有中文,可能会有乱码现象。(可能有其他原因,多试几次找到最佳方法) 下面有两种解决办法。 点击右下角中的“UTF-8”,选择“Reopon with Encoding(通过编码重新打开)”,输入“GB 2312”,选择“Simplified

    2024年02月12日
    浏览(32)
  • 解决IntelliJ IDEA 代码运行时中文出现乱码

    在我们刚接触到IDEA时,想美滋滋的敲一个“hello world”来问候这个世界,但难免会遇到这种问题 乱码!乱码!乱码!  内心的崩溃就在一瞬间,下面我就来分享几个实用的解决方法 首先最重要的一点,假如你安装的是JDK20等版本,最好的建议是换成JDK17,然后再更改idea里的

    2024年02月13日
    浏览(32)
  • Qt中出现中文乱码的原因以及解决方法

    Qt专栏: 目录 1.引言 2.原因分析 3.源文件的编码格式修改方法 4.程序内部使用的默认编码格式修改方法 5.QString转std::string的方法 6.总结         在编写Qt程序的时候,或多或少都可能遇到用QString时候,明明自己写的是中文,但是在界面上显示出来却是乱码,最终的原因都是

    2024年04月15日
    浏览(28)
  • 解决ssh远程连接服务器出现的中文乱码问题

    ssh远程连接服务器出现中文乱码主要分为两种: 1、命令行输出的中文有乱码 比如ll输出的月份,ibus等命令输出的信息 2、vim打开文件,文件显示乱码 1、查看使用的XShell活MobaXterm等远程连接软件的会话属性。 以XShell为例:文件-当前会话属性/默认会话属性-终端-编码,设置成

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包