当前位置: 首页 > article >正文

Redis默认序列化方式乱码原因及解决办法

Redis默认序列化方式乱码原因及解决办法

乱码原因

使用自定义序列化器

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
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.RedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(){
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        return jackson2JsonRedisSerializer;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // Key HashKey使用String序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());

        // Value HashValue使用Jackson2JsonRedisSerializer序列化
        template.setValueSerializer(jackson2JsonRedisSerializer());
        template.setHashValueSerializer(jackson2JsonRedisSerializer());

        template.setConnectionFactory(factory);
        return template;
    }
}

http://www.kler.cn/a/162086.html

相关文章:

  • vue3 pdf base64转成文件流打开
  • vue2.x elementui 固定顶部、左侧菜单与面包屑,自适应 iframe 页面布局
  • 怎么监控员工电脑?分享5个监控员工电脑的绝佳方法(立竿见影!建议收藏!)
  • 解决C盘空间不足的三种方案
  • 工业通信协议对比:OPC-UA、Modbus、MQTT、HTTP
  • LinkedList和单双链表。
  • 谷歌正式发布最强 AI 模型 Gemini
  • C语言——常用库函数
  • 强化学习——简单解释
  • 学习spring、springmvc、mybatis、ssm所有可能用到的依赖总结,父工程pom文件依赖,<packaging>pom</packaging>
  • 2023年5个自动化EDA库推荐
  • 新概念第一册
  • python获取公网IP的三种方法
  • Vue.filter
  • vivado实现分析与收敛技巧9-分析使用率统计数据
  • 7-1 查找书籍
  • 拨号连接bat命令和拨号错误623,系统无法找到此连接的电话簿项的解决方法
  • 联邦学习新探:端边云协同引领大模型训练的未来 | INFOCOM 2024
  • STM32存储左右互搏 SPI总线读写FRAM MB85RS16
  • Spring 依赖注入的三种方式优缺点
  • 【UE5】瞬移+马赛克过渡效果
  • mixamo根动画导入UE5问题:滑铲
  • NGINX相关配置
  • Apache solr XXE 漏洞(CVE-2017-12629)
  • webrtc 设置不获取鼠标 启用回声消除
  • Java 简易版 TCP(一对一)聊天