简单聊一聊redis过期时间的问题

 更新时间:2023年04月14日 11:51:11   作者:凌晨四点的打铁声  
在使用redis的过期时间时不由想到设置了过期时间,下面这篇文章主要给大家介绍了关于redis过期时间问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1.多次修改一个redis的String过期键,如何保证他仍然能保留第一次设置时的删除时间

对于修改String,redis有:set、setex、append、incr、decr等,其中,使用set、setex来修改原来存在的String,会重置原来设置过的过期时间,严格来说set、setex不是“修改”,而是覆盖,所以原来设置过的key-value,再次set/setex这个key就会覆盖掉原来的。使用try redis(网址:https://try.redis.io/)测试结果如下:

如果使用append、incr、decr等命令来修改,并不会重置原来的过期时间:

所以,对于 string 结构,只要进行 set /setex命令,就会重置过期时间,而set命令会直接把过期时间变为永不过期。
比如我在7:00设置了一个 {key1:value} ,过期时间为30分钟,在7:00-7:30期间多次set/setex这个 key 的 value,这个 key1 的过期时间都会重置,最终不会在7:30过期。如何保证每次设置这个过期键后不刷新过期时间,稳定在7:30过期?

方法一:

使用 定时器,第一次 set 的时候就创建一个定时器,到期就把这个 key 删除。这种方法在数据量大时会比较占用cpu资源,不推荐。

方法二:

每次setex key的 value 之前,先返回此时key的剩余过期时间,在setex时把这个剩余的过期时间赋给这个 key 作为新的过期时间,就可以解决。

以Spring项目为例,利用 redisTemplate.getExpire(String key) 方法返回的剩余过期时间戳(毫秒级别)可以解决,本质上是给 redis 发送 PTTL 命令,以返回毫秒为单位的key的剩余过期时间。

代码例子:

让 key1 每次修改 都保持第一次设置时的过期时间

//获取key1的剩余时间的时间戳
Long expire = redisTemplate.getExpire("key1");
//最后一个参数可以选秒、毫秒(TimeUnit.MILLISECONDS),Redis最多只能返回毫秒级别的key的剩余过期时间
redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);

2.修改hash、set、Zset、list的值,会使过期时间重置吗?

String类型的K-V 的有效期会随着的 value 值的修改,重新计时:

如存在一个 K-V ,过期时间为30秒, 如果把 value 值修改,则过期时间就会重置为30秒,而不是在原来设定的时间减去已经流失的时间。

除了string数据结构,对其他数据结构进行修改,不会重置过期时间

比如hash、set、Zset、list等:

以hash为例子:

hash 的有效期不会随着 hash 字段值的修改重新计时。
如果需要重新计时,则需要在修改字段值的时候,重新指定有效期。

总结

到此这篇关于redis过期时间问题的文章就介绍到这了,更多相关redis过期时间问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis高并发场景下秒杀超卖解决方案(秒杀场景)

    Redis高并发场景下秒杀超卖解决方案(秒杀场景)

    早起的12306购票,刚被开发出来使用的时候,12306会经常出现超卖 这种现象,也就是说车票只剩10张了,却被20个人买到了,这种现象就是超卖,今天通过本文给大家介绍Redis高并发场景下秒杀超卖解决方案,感兴趣的朋友一起看看吧
    2022-04-04
  • 一文详细介绍Redis7持久化机制RDB和AOF

    一文详细介绍Redis7持久化机制RDB和AOF

    这篇文章主要给大家分享一下Redis的数据持久化方式,Reids是一个高性能的缓存中间件,它的高性能是因为它是基于内存的,我们知道直接操纵内存是比较快的,所以当机器发生宕机,那么数据就会完全丢失,所以本文详细介绍Redis7持久化机制RDB和AOF
    2023-07-07
  • redis lua限流算法实现示例

    redis lua限流算法实现示例

    这篇文章主要为大家介绍了redis lua限流算法实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Redis Hash序列化存储的问题及解决方案

    Redis Hash序列化存储的问题及解决方案

    这篇文章主要介绍了Redis Hash序列化存储的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Redis的过期键删除策略原理说明

    Redis的过期键删除策略原理说明

    这篇文章主要介绍了Redis的过期键删除策略原理说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Redis 实现好友关注和关注推送的示例代码

    Redis 实现好友关注和关注推送的示例代码

    本文介绍了使用Redis实现好友关注和关注推送功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Redis安装启动及常见数据类型

    Redis安装启动及常见数据类型

    这篇文章主要介绍了Redis安装启动及常见数据类型,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • redis初学者常见字符乱码问题及解决方案

    redis初学者常见字符乱码问题及解决方案

    这篇文章主要介绍了redis初学者常见字符乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 排查Redis大key的方法总结

    排查Redis大key的方法总结

    这篇文章主要介绍了排查Redis大key的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧
    2024-08-08
  • 使用redis实现高效分页的项目实践

    使用redis实现高效分页的项目实践

    在很多场景下,我们需要对大量的数据进行分页展示,本文主要介绍了使用redis实现高效分页的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论