redis设置过期时间

这篇具有很好参考价值的文章主要介绍了redis设置过期时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1为什么要设置redis过期时间

Redis 设置过期时间的意思是为一个 key 设置一个时间窗口,在这个时间窗口内,该 key 可以被访问和使用,到达时间窗口后,Redis 会自动删除过期的 key。可以使用 Redis 的 expire 命令或其他相关命令来设置一个 key 的过期时间。设置过期时间可以有效控制 Redis 中存储的数据量,避免占用过多的内存资源。同时,也可以通过过期时间来实现 Redis 中一些常见的应用场景,例如缓存、限流、分布式锁等。
补充
在 Redis 中,过期时间一到并不意味着键就会立即被删除。Redis 会以惰性删除的方式删除过期键,即在读取键的时候判断该键是否过期,如果过期则删除该键。这种删除方式虽然会导致过期键在一段时间内仍然占用内存空间,但是可以避免在非常频繁的情况下进行键的删除操作,从而提高 Redis 的性能。但是,如果 Redis 中的键长期没有被访问,过期时间也过了,而且内存空间也非常紧张,这时 Redis 可能会采用主动清理过期键的方式来释放内存空间。因此,如果对于 Redis 中的过期键需要立即删除,则可以使用 DEL 命令手动删除该键stringRedisTemplate.delete(key);或者使用 EXPIRE 命令将该键的过期时间重置为一个小于当前时间的值,以达到立即删除的效果。
Redis 的过期删除是异步的。当一个键过期时,Redis 并不会立即将其删除,而是将过期键添加到一个专门的待删除列表中,然后由单独的线程在后台异步删除这些过期键。这种异步删除的方式可以避免 Redis 在处理大量过期键时的性能瓶颈,并且在并发访问的情况下也能保证数据的一致性。同时,Redis 也提供了主动清理过期键的机制,当访问 Redis 中的键时,如果发现某个键已经过期,则 Redis 会立即删除该键。这种惰性删除的方式也是 Redis 提高性能的一种方式。需要注意的是,在 Redis 中,即使某个键已经过期,也不一定会立即被删除,因为 Redis 会定期地检查待删除列表,并删除那些过期时间已到的键。

2设置过期时间的分布式锁应用场景

可以通过 Redis 设置过期时间的特性来实现分布式锁。具体实现方法如下:

  1. 获取锁:使用 Redis 的 SETNX 命令来设置一个 key,如果该 key 不存在,则设置成功并获取到了锁,可以执行后续的业务逻辑。 Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(key, "true");
  2. 设置过期时间:对于获取到锁的客户端,设置一个过期时间,这个过期时间要比业务执行时间长,保证在业务执行完成之前,锁不会过期。
  3. 释放锁:在业务执行完成之后,需要通过 DEL 命令来删除该 key,释放锁。
  4. 防止误释放:为了防止该客户端因为某种原因未能及时释放锁,导致锁过期后被其他客户端获取,可以使用 Redis 的 GETSET 命令来判断该 key 在删除的同时是否被修改,如果被修改,则说明有其他客户端已经更新了该 key,并获取到了锁。
    分布式锁是一个常见的分布式系统问题,使用 Redis 设置过期时间能够简单高效地实现分布式锁。需要注意的是,在使用 Redis 分布式锁时,应该考虑锁的粒度、过期时间、可重入性等问题,防止锁的误用或滥用导致系统性能下降或出现死锁等问题。
    补充
    SETNX 是 Redis 中的一个命令。用于设置一个值,并在该 key 不存在时设置该 key 的值。如果该 key 不存在,则设置成功并返回 1;如果该 key 已经存在,则不做任何操作,返回 0。SETNX 命令是一个原子操作,可以保证在高并发情况下多个客户端同时请求 SETNX 命令时,只有一个客户端能够成功获取到锁。因此,SETNX 命令常被应用于实现分布式锁的场景中。在分布式锁的实现中,SETNX 命令可以用来判断当前是否已有其他客户端获取到了锁,如果已经获取到了锁,则本次请求应该等待或者放弃获取锁的操作,避免出现脏数据。

3应用分布式锁的时候

redis应用到分布式锁的时候过期时间是一定要要设置的吗?
当 Redis 应用到分布式锁的时候,过期时间并不是一定要设置的,但是设置过期时间可以有效避免因为某个客户端异常导致锁一直被占用而无法被其他客户端获取的情况,从而避免出现死锁或者长时间的等待。在分布式系统中,很难保证所有客户端都按照正常的流程执行,因此为分布式锁设置过期时间可以更加安全地保护共享资源。同时,在设置过期时间的时候,应该根据业务的实际情况和系统的负载来调整过期时间,以达到既能保证并发安全,又能尽量避免因为过期时间过短而频繁获取锁、因为过期时间过长而导致资源被长时间占用的效果。文章来源地址https://www.toymoban.com/news/detail-429433.html

到了这里,关于redis设置过期时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Redis】为什么要学 Redis

    关于为什么要学 Redis 这个问题,一个字就可以回答,那就是:快! Redis是一个将数据储存到内存中的非关系型数据库,它是以键值对的形式来组织数据的,一般可以用作内存数据库、缓存、消息队列等。 使用 Redis 的主要原因就是因为它的快,但是它的快是相对于 MySQL 等这样

    2024年02月09日
    浏览(33)
  • redis为什么快

      内存存储:Redis 主要将数据存储在内存中,内存的读写速度远高于磁盘存储。这使得 Redis 能够快速地响应读写请求,适用于对读写性能要求较高的场景。 单线程模型:Redis 使用单线程模型来处理客户端请求,避免了多线程间的锁竞争和上下文切换开销。虽然单线程模型在

    2024年01月19日
    浏览(56)
  • Redis为什么快?

    redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。和Memcached类似。redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。 它的速度快主要归功于以下几个方面: 内存

    2023年04月26日
    浏览(40)
  • 为什么要用redis

    就是把你一些复杂操作耗时查出来的结果(用了600ms),如果确定后面不咋变了,然后但是马上还有很多读请求,那么直接结果放缓存(6ms),后面直接读缓存就好了。 这样,性能就提升了100倍 说白了就是,用redis挡访问,高并发的访问,不让mysql挂了。 mysql这么重的数据库,压根

    2024年02月12日
    浏览(30)
  • Redis为什么能如此之快

    Redis,一个以超高的性能和强大 的数据结构功能著称的内存数据库,在处理各种复杂数据操作时,速度却能达到惊人的水平。那么,Redis为什么能如此之快呢?今天,我们就来深入解析一下Redis的线程模型,揭开这个问题的神秘面纱。 在探讨Redis的线程模型之前,我们首先需要

    2024年02月12日
    浏览(30)
  • Redis为什么快?(面试常问)

    Redis 是一个开源的高性能内存数据库,特点是数据存储在内存中,操作时性能更高;还支持多种数据结构,String、Hash、list、set、zset等,key还支持自动过期。 Redis的好处 是因为数据存在内存中所以性能更高,还有因为是单线程操作,所以天然具有线程安全的特性,单线程又能

    2024年02月11日
    浏览(34)
  • 【译】为什么AI难以概念化时间

    原作:FNTGAI 引言:如何弥合AI与先验概念之间的鸿沟   时间不是你能看到、听到或触摸到的东西。这就是康德所说的“先验”,意味着它在感官中没有对应物。你无法给时间贴标签或分类。这使得AI很难建立时间概念。例如,考虑一下当您询问 ChatGPT 您与它交谈了多长时间时

    2024年02月20日
    浏览(35)
  • Redis为什么会这么快?Redis到底有多快?

    官方文档:https://redis.io/docs/management/optimization/benchmarks/ 我们使用redis自带的benchmark脚本测试: 我们发现,每秒可以执行11万多次set、lpush命令。 执行Lua脚本也能达到每秒10万多次,按照这个测试结果,redis的10万qps还是比较准确的,在高性能服务器上性能还能更强。 总结起来主

    2024年02月07日
    浏览(36)
  • Redis为什么是单线程的

    首先,现在的CPU一般都是由多个核心组成,每个核心可以认为是一个独立的处理器,它们能够并行地处理任务。所以,如果我们的CPU是多核的,但是程序是单线程的,那么执行程序时,这个线程在某一个时刻只能在一个核心上运行,而其它的核心却是空闲的(如果没有其他程

    2024年02月11日
    浏览(35)
  • redis 存储一个map 怎么让map中其中一个值设置过期时间,而不是过期掉整个map?

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包