解决使用redisTemplate set方法保存出现x00问题[亲测有效]

解决使用redisTemplate set方法保存出现x00问题[亲测有效]在项目有个需求要保存一个字符串到redis,并设置一个过期时间。这个需求一看非常简单,使用redisTemplate一行代码搞定,代码如下 redisTemplate.opsForValue().se

解决使用redisTemplate set方法保存出现x00问题

在项目有个需求要保存一个字符串到redis,并设置一个过期时间。这个需求一看非常简单,使用redisTemplate一行代码搞定,代码如下

redisTemplate.opsForValue().set("userKey", data, 10000); 

代码100分

但保存后,查看redis发现value的前缀多出了

代码100分x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x

一开始以为是redis的序列化问题,于是就修改了redisTemplate的序列化方式,终于还是没能解决问题。那问题出在哪里?翻看源码,发现redisTemplate.opsForValue().set()有重载方法,一个是

void set(K key, V value, long offset) 

另外一个是

代码100分void set(K key, V value, long timeout, TimeUnit unit)

调用set(K key, V value, long offset)这个方法,其底层调用的是redis的setrange命令,这个命令看官网介绍

Overwrites part of the string stored at key, starting at the specified offset, for the entire length of value. If the offset is larger than the current length of the string at key, the string is padded with zero-bytes to make offset fit. Non-existing keys are considered as empty strings, so this command will make sure it holds a string large enough to be able to set value at offset

其含义是从指定的偏移量开始,覆盖整个值范围内从key存储的字符串的一部分。如果偏移量大于key处字符串的当前长度,则该字符串将填充零字节以使偏移量适合。不存在的键被视为空字符串,因此此命令将确保它包含足够大的字符串以能够将值设置为offset。

调用set(K key, V value, long timeout, TimeUnit unit)这个方法,其底层调用的是redis命令setex。这个命令看官网介绍

Set key to hold the string value and set key to timeout after a given number of seconds

很显然这个方法,才是我们真正想要的方法。因此解决使用restemplate set方法保存出现x00问题的方案就是使用

void set(K key, V value, long timeout, TimeUnit unit)

这个方法

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

(0)
上一篇 2023-03-12
下一篇 2023-03-12

相关推荐

  • Python下直观易懂的解析

    Python下直观易懂的解析Python是一种高级编程语言,它的解释执行可以让开发者更加专注于业务逻辑而不是底层的代码实现。Python的解释器会将Python代码翻译成字节码,并在Python虚拟机上执行这些字节码。同时,Python是一种动态的语言,它能够根据上下文自动推断数据类型,这使得Python编写的程序更加简洁易懂。

    2024-01-01
    64
  • Navicat Premium(多连接数据库管理工具)[通俗易懂]

    Navicat Premium(多连接数据库管理工具)[通俗易懂]Navicat Premium 16 是一款可以多重连接的数据库管理工具。与旧版本相比,Navicat 16 带来了许多 UI/UX 改进。我们致力于提供专业的 UX 设计,以提高可用性和可访问性。因

    2023-06-01
    102
  • JAVA 中使用 SQL 语句查询 EXCEL 文件数据「建议收藏」

    JAVA 中使用 SQL 语句查询 EXCEL 文件数据「建议收藏」有些业务数据保存在EXCEL文件中,怎么在JAVA应用程序里用SQL语句来查询这些数据,以便进行进一步的计算呢? SQL 语言是基于数据库的查询语言,被查询的数据只能位于数据库中,所以通常的做法是先…

    2023-03-01
    107
  • Linux中MySQL的安装以及卸载「终于解决」

    Linux中MySQL的安装以及卸载「终于解决」一.MySQL MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.目前 MySQL被

    2023-04-22
    109
  • sql语句执行步骤详解[通俗易懂]

    sql语句执行步骤详解[通俗易懂][toc] 一、准备工作 先来一段伪代码,首先你能看懂么? 继续做以下的前期准备工作: 新建一个测试数据库TestDB; 创建测试表table1和table2; 插入测试数据; 准备工作做完以后,ta

    2022-12-23
    127
  • 意派Epub360丨学党史、知奋进,红色地标推荐线路交互H5怎么做?

    意派Epub360丨学党史、知奋进,红色地标推荐线路交互H5怎么做?天气渐渐转暖,很多人都开始制定出游计划了。在众多旅游推荐线路中,以红色地标为主题的精品线路既独特又吸睛。 这类红色地标精品线路旨在便于人民群众更好地传承红色精神。游客们既可以参观打卡红色地标,又能结…

    2023-04-13
    103
  • [20220303]oracle如何定位使用library cache mutex 3.txt[通俗易懂]

    [20220303]oracle如何定位使用library cache mutex 3.txt[通俗易懂][20220303]oracle如何定位使用library cache mutex 3.txt–//这个问题实际上困扰我很久,我开始以为library cache bucket在1个chunk内,只

    2023-05-08
    84
  • Python原始标题生成工具

    Python原始标题生成工具Python是一种高级编程语言,被广泛应用于数据科学、机器学习、人工智能等领域。在这些应用场景中,标题是一个很重要的元素,帮助人们更好地理解和概括文章内容。然而,写标题往往是一件费时费力的事情,需要有创造力和灵感。为了解决这个问题,一些Python程序员开发了Python原始标题生成工具,可以自动生成具有语法正确性和信息量的标题。

    2024-05-05
    12

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注