Spring的RedisTemplate存储的key和value有特殊字符的处理

 更新时间:2023年12月20日 15:03:30   作者:lkforce  
这篇文章主要介绍了Spring的RedisTemplate存储的key和value有特殊字符的处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Spring RedisTemplate存储的key和value有特殊字符

Spring的spring-data-redis包下有RedisTemplate类,当调用:

redisTemplate.opsForValue().set("TEST","ABCD");

方法后,Redis里实际保存的key并不完全等于我们预设的key值,而是在key值前面加了一些特殊字符

就像这样的:

"\xac\xed\x00\x05t\x00\x0cTEST"

而保存的value可能是这样的:

"\xac\xed\x00\x05t\x00\x10cABCD"

开头会有类似\xac\xed\x00\x05t\x00\x0c这样的特殊字符。

这种特殊字符出现的原因

是因为RedisTemplate默认使用JdkSerializationRedisSerializer作为序列化工具。

虽然保存的key和我们想象中的不太一样,但是并不影响我们调用

redisTemplate.opsForValue().get("TEST");

去获取之前设置的value,而且得到的value也是正确的,不带特殊字符。

这应该是因为RedisTemplate把查询用的key值进行同样的序列化后再进行查询,所以能成功的找到该条记录,并把value反序列化后返回,得到的就是没有特殊字符的value。

如果不想在保存的key和value里包含这种特殊字符,可以手动修改序列化方式

使用以下代码:

@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
    RedisSerializer stringSerializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(stringSerializer);
    redisTemplate.setValueSerializer(stringSerializer);
    redisTemplate.setHashKeySerializer(stringSerializer);
    redisTemplate.setHashValueSerializer(stringSerializer);
    this.redisTemplate = redisTemplate;
}

注意:

方法前面的@Autowired注解是需要加的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用log4j2关闭debug日志

    使用log4j2关闭debug日志

    这篇文章主要介绍了使用log4j2关闭debug日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java中的Redis是什么意思

    Java中的Redis是什么意思

    Redis是一个非常强大的工具,它可以用来实现很多有趣的应用,还可以使用Redis来实现分布式锁,这样你就可以在多线程或多进程的环境下同步代码,这篇文章主要介绍了Java中的Redis是什么意思,需要的朋友可以参考下
    2023-08-08
  • 详解Mybatis中的 ${} 和 #{}区别与用法

    详解Mybatis中的 ${} 和 #{}区别与用法

    这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java 遍历 String 字符串所有字符的操作

    Java 遍历 String 字符串所有字符的操作

    这篇文章主要介绍了Java 遍历 String 字符串所有字符的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java Web中常用的分页组件(Java端实现)

    Java Web中常用的分页组件(Java端实现)

    本文通过使用场景分析给大家介绍了Java Web中常用的分页组件(Java端实现),非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-05-05
  • SpringBoot项目整合拦截器详解

    SpringBoot项目整合拦截器详解

    这篇文章主要介绍了SpringBoot项目整合拦截器详解,java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,拦截器用于在某个方法或者字段被访问之前进行拦截,然后再之前或者之后加入某些操作,需要的朋友可以参考下
    2023-10-10
  • SpringBoot使用邮箱发送验证码实现注册功能

    SpringBoot使用邮箱发送验证码实现注册功能

    这篇文章主要为大家详细介绍了SpringBoot使用邮箱发送验证码实现注册功能实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • SpringBoot详解MySQL如何实现读写分离

    SpringBoot详解MySQL如何实现读写分离

    当响应的瓶颈在数据库的时候,就要考虑数据库的读写分离,当然还可以分库分表,那是单表数据量特别大,当单表数据量不是特别大,但是请求量比较大的时候,就要考虑读写分离了.具体的话,还是要看自己的业务...如果还是很慢,那就要分库分表了...我们这篇就简单讲一下读写分离
    2022-09-09
  • 使用 Spring Boot Admin 监控应用状态的详细过程

    使用 Spring Boot Admin 监控应用状态的详细过程

    这篇文章主要介绍了使用 Spring Boot Admin 监控应用状态,该模块采集应用的内部信息,并暴露给外部的模块,支持 HTTP 和 JMX,并可以与一些第三方监控系统(如 Prometheus)整合,需要的朋友可以参考下
    2022-09-09
  • Java使用国密算法实现数据加密传输的完整示例

    Java使用国密算法实现数据加密传输的完整示例

    文章主要介绍了使用SM2和SM4算法进行混合加密的完整方案,包括前后端协议、SpringBoot后端代码实现、前端代码实现以及注意事项,并提供了生产环境的建议和最小可验证步骤,需要的朋友可以参考下
    2026-03-03

最新评论