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

springboot RedisTemplate支持多个序列化方式

前提纪要:因为业务变动,需要在原先只支持protobuf的前提序列化的前提下,新增正常的序列化读取数据所以在原先的基础上进行优化。文章用于记忆。
话不多说直接上代码

@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@Import({RedisAutoConfiguration.class})
@Slf4j
public class ProtobufRedisTemplateConfig  {

    private final LettuceConnectionFactory lettuceConnectionFactory;

    public ProtobufRedisTemplateConfig (LettuceConnectionFactory lettuceConnectionFactory) {
        this.lettuceConnectionFactory = lettuceConnectionFactory;
    }

    @Bean
    public RedisTemplate<Object, Object> protobufRedisTemplate() {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory);

        RedisSerializer<byte[]> byteRedisSerializer = new RedisSerializer<byte[]>() {
            @Override
            public byte[] serialize(byte[] bytes) throws SerializationException {
                return new byte[0];
            }
            @Override
            public byte[] deserialize(byte[] bytes) {
                return bytes;
            }
        };

        template.setKeySerializer(byteRedisSerializer);
        template.setValueSerializer(byteRedisSerializer);

        template.setHashKeySerializer(byteRedisSerializer);
        template.setHashValueSerializer(byteRedisSerializer);

        template.afterPropertiesSet();
        log.warn("the Lettuce-protobuf starting success, date is -->" + new Date());

        return template;
    }

    @Bean
    public RedisTemplate<String, Object> jsonRedisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        // 使用Jackson2JsonRedisSerializer 替换默认的JDKSerializationRedisSerializer 来序列化和反序列化redis 的value值
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

使用

    @Autowired
    @Qualifier("protobufRedisTemplate")
    private RedisTemplate<Object, Object> protobufRedisTemplate;

    @Autowired
    @Qualifier("jsonRedisTemplate")
    private RedisTemplate<String, Object> redisTemplate;


http://www.kler.cn/news/363505.html

相关文章:

  • 项目提测质量不高导致延期何解?
  • Data+AI━━隐私都没了,还不懂用户画像吗?
  • 探索数据治理对网络安全的影响
  • [手机Linux PostmarketOS]七, Linux使用selenium爬虫
  • 定时任务使用kafka
  • kotlin 入门总结
  • MacOS RocketMQ安装
  • 「AIGC」AI设计工具Polymet
  • mac m1 git clone 忽略大小写敏感
  • Linux 部署 Harbor 镜像仓库详解
  • 数据库、数据仓库、数据湖和数据中台有什么区别
  • 如何利用ChatGPT提升SEO内容排名
  • 思迈特助力鸡蛋帮获“24年数据要素x”河北分赛“发展潜力奖”
  • oracle数据恢复—文件损坏导致Oracle数据库打开报错的数据恢复案例
  • Spark 基础概念
  • 编程练习7 5G网络建设
  • AI手机的启明星:从分级标准到智能体手机
  • 【秋招笔试-支持在线评测】10.23花子秋招(已改编)-三语言题解
  • YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理
  • C++程序流程结构——选择结构
  • 前端_007_Axios库
  • Flutter SizedBox组件
  • 奇安信勒索解密工具分析及调用
  • Java程序设计:spring boot(9)——应用热部署
  • Java|乐观锁和悲观锁在自旋的时候分别有什么表现?
  • 论文速读:面向单阶段跨域检测的域自适应YOLO(ACML2021)