it编程 > 数据库 > Redis

RedisTemplate默认序列化方式显示中文乱码的解决

12人参与 2025-06-06 Redis

在 spring data redis 中,存储数据时出现乱码通常是因为 redistemplate 的默认序列化方式(jdkserializationredisserializer)将数据存储为二进制格式,而不是可读的字符串格式。要解决这个问题,你可以通过配置 redistemplate,使用合适的序列化器(如 stringredisserializer 或 jackson2jsonredisserializer)来存储数据。

以下是解决方案和配置示例:

1. 问题原因

2. 解决方案

通过配置 redistemplate,指定 key 和 value 的序列化器。常用的序列化器包括:

3. 配置类示例

以下是一个配置类的示例,使用 stringredisserializer 和 jackson2jsonredisserializer

import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.connection.redisconnectionfactory;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.serializer.jackson2jsonredisserializer;
import org.springframework.data.redis.serializer.stringredisserializer;
import com.fasterxml.jackson.annotation.jsontypeinfo;
import com.fasterxml.jackson.databind.objectmapper;
import com.fasterxml.jackson.databind.jsontype.impl.laissezfairesubtypevalidator;

@configuration
public class redisconfig {

    @bean
    public redistemplate<string, object> redistemplate(redisconnectionfactory redisconnectionfactory) {
        redistemplate<string, object> template = new redistemplate<>();
        template.setconnectionfactory(redisconnectionfactory);

        // 使用 stringredisserializer 序列化 key
        template.setkeyserializer(new stringredisserializer());
        template.sethashkeyserializer(new stringredisserializer());

        // 使用 jackson2jsonredisserializer 序列化 value
        jackson2jsonredisserializer<object> serializer = new jackson2jsonredisserializer<>(object.class);
        objectmapper objectmapper = new objectmapper();
        objectmapper.activatedefaulttyping(
            laissezfairesubtypevalidator.instance,
            objectmapper.defaulttyping.non_final,
            jsontypeinfo.as.property
        );
        serializer.setobjectmapper(objectmapper);

        template.setvalueserializer(serializer);
        template.sethashvalueserializer(serializer);

        return template;
    }
}

4. 配置说明

5. 使用示例

配置完成后,redistemplate 会自动使用新的序列化器。以下是一个简单的使用示例:

import org.springframework.beans.factory.annotation.autowired;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.stereotype.service;

@service
public class userservice {

    @autowired
    private redistemplate<string, object> redistemplate;

    public void saveuser(string key, user user) {
        redistemplate.opsforvalue().set(key, user);
    }

    public user getuser(string key) {
        return (user) redistemplate.opsforvalue().get(key);
    }
}

6. 验证存储结果

7. 注意事项

总结

通过配置 redistemplate 的序列化器,可以解决 spring data redis 存储数据乱码的问题。推荐使用 stringredisserializer 和 jackson2jsonredisserializer,分别处理 key 和 value 的序列化。

到此这篇关于redistemplate默认序列化方式显示中文乱码的解决的文章就介绍到这了,更多相关redistemplate默认序列化乱码内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Redis底层数据结构之字典(Dict)的实现

06-06

Rsync将一台主Web服务器上的文件和目录同步到另一台备份服务器(最新推荐)

06-05

CentOS 7 YUM源配置错误的解决方法

06-03

Apache Doris中的Coordinator节点核心作用实例详解

06-03

Redis主从复制作用及搭建过程

06-01

Redis指南及6.2.x版本安装过程

06-01

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论