设置键的生存时间或过期时间
通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的时间之后,服务器就会自动删除生存时间为0的键。
set key value EXPIRE key 5 GET key
与EXPIRE命令和PEXPIRE命令类似,客户端可以通过EXPIREAT命令或PEXPIREAT命令,以秒或毫秒精度给键设置过期时间(expire time).过期时间是一个UNIX时间戳,当键的过期时间来临时,服务器就会自动从数据库中删除这个键。
SET key value EXPIREAT key 1371234567 TIME //当前时间 GET key TIME //当前时间 GET keyTTL命令和PTTL命令接收一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是距离这个键被服务器自动删除还有多长时间。
SET key value EXPIRE key 1000 TTL key PTTL msgRedis有四种不同的命令可以用于设置键的生存时间。
- EXPIRE $key $TTL 设置key的过期时间为TTL秒
- PEXPIRE $key $TTL 设置key的过期时间为TTL毫秒
- XPIREAT $key $timestamp 设置key过期时间为指定的timestamp秒数
- PXPIREAT $key $timestamp 设置key过期时间为指定的timestamp毫秒数
过期键删除策略
如果一个键过期了,可能会有三种删除策略:定时删除、惰性删除、定期删除。
定时删除
定时删除策略对内存是最友好的,通过使用定时器,定时删除策略可以保证过期键会尽可能快的被删除,并释放过期键所占用的内存。
另一方面,定时删除策略缺点是,它对CPU时间是不友好的,在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐造成影响。
惰性删除
惰性删除策略对CPU时间来说是友好的,程序只会在取出键时才进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会再删除其他无关的键上花费任何时间。
惰性删除的缺点是,它对内存是不友好的,如果一个键已经过期,而这个键有仍然保留在数据库中,那么只要这个键不被删除,内存就不会释放。在使用惰性删除策略是,如果数据库中有非常多的过期键,而这些过期键又敲好没有被访问到,那么他们永远也不会被删除。
定期删除
从定时删除和惰性删除来看,这两种删除方式单一--使用时都有明显的缺陷:
- 定时删除占用太多CPU时间,影响服务器的响应时间和吞吐量
- 惰性删除浪费太多内存,有内存泄漏的危险
定期删除时前两种策略的一个折中:
- 定期删除策略每隔一段时间执行一次删除过期键的操作,并通过限制删除操作执行时常和频率来减少删除操作对CPU时间的影响
- 通过定期删除键,定期删除策略有效的减少了因为过期而带来的内存浪费
定期删除策略的难点是确定删除执行的时长和频率:
- 如果删除操作执行的太频繁或者执行的时间太长,定期删除策略会退化成定时删除策略,以至于将CPU时间过多地消耗在删除过期键上面。
- 如果删除操作执行的太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况。
因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除策略执行的时间和执行频率。
RDB和复制功能对过期键的处理
在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。因此,数据库中包含过期键不会对生成新的RDB文件造成影响。
在启动redis服务器时,如果服务器开启了RDB功能,那么服务器将对RDB文件进行载入:
- 如果服务器以主服务器模式运行,那么在载入RDB文件时,程序会对文件保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会被忽略,所以过期键对载入RDB文件的嘱咐其不会造成影响。
- 如果以从服务器模式运行,那么在载入RDB文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。不过,因为主从服务器在进行数据同步的时候,从服务器的数据就会被清空,所以一般来讲,过期键对载入RDB文件的从服务器也不会造成影响。
当服务器运行在复制模式下时,从服务器的过期键删除动作由主服务器控制:
- 主服务器在删除一个过期键之后,会显式的向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键
- 从服务器在执行客户端发送的读命令是,即使碰到过期键也不会将过期键删除,而是继续像处理未过期的键一样来处理过期键。
- 从服务器只有在接到主服务器发来的DEL命令之后,才会删除过期键。
通过主服务器来控制从服务器统一删除过期键,可以保证主从服务器数据一致,也正是因为这个原因,当一个过期键仍然存在于主服务器的数据库时,这个过期键在从服务器的复制时也会继续存在。
相关推荐
Redis 过期删除策略和内存淘汰策略的区别 Redis 是一个高效的 NoSQL 数据库,可以对 key 设置过期时间,以便删除已过期的键值对。然而,Redis 还有一个内存淘汰策略,用于删除 Redis 中的键值对以释放内存。那么,...
标题中的“22_redis的过期策略能介绍一下?要不你再手写一个LRU?”表明我们要探讨的是Redis的缓存过期策略以及LRU(Least Recently Used)算法的实现。Redis是一个流行的键值存储系统,它广泛用于缓存、计数器、...
Redis提供了多种机制来处理过期键,主要分为两大类:过期键的删除策略和内存达到上限时的处理策略。这两种机制确保了Redis能够在内存资源有限的情况下仍然保持良好的性能和服务质量。 #### 三、过期键的删除策略 ...
"Redis过期策略和内存淘汰机制" Redis是一种基于内存的NoSQL数据库,它具有高效的读写性能和丰富的数据结构。但是,Redis的内存使用量也会不断增加,如果不进行合理的内存管理,将会导致Redis服务器崩溃或性能下降...
在Redis中,键的过期删除策略是管理键值存储生命周期的重要组成部分,确保数据的有效性和内存管理。Redis提供了三种主要的过期删除策略:定时删除、惰性删除和定期删除。 1. 定时删除: 在设置键的过期时间时,...
尽管没有具体的标签,但我们可以基于标题和描述推测其内容主要涉及 Redis 的过期策略和删除机制。 Redis 过期策略主要有两种: 1. **主动删除(主动检查)**:当 Redis 服务器在处理客户端请求时,会随机检查一...
总结,Redis 的删除策略涉及到多种机制,包括主动和惰性过期、TTL 管理、驱逐策略等。理解这些机制对于优化 Redis 性能和管理内存至关重要。在面试中,掌握这些知识点不仅能展示你对 Redis 的深入理解,也有助于解决...
redis 一共有 4 个命令来设置键的生存时间(可以存活多久)或过期时间(什么时候被删除) expire <key> <ttl>:将 key 的生存时间设置为 ttl 秒 pexpire <key> <ttl>:将 key 的生存时间设置为 ttl 毫秒 expireat...
对于过期的数据要redis根据会删除策略进行删除。删除策略有: 定时删除 惰性删除 定期删除 一、定时删除 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。 优点 节约...
Redis 过期-淘汰机制是指将过期的数据或者很久没有访问的数据进行删除的机制。该机制分为主动淘汰和被动淘汰两种。主动淘汰是指用户设定过期时间,例如使用定时过期、惰性过期和定期过期等策略。被动淘汰是指Redis ...
Redis 是一款高性能的键值型内存数据库,其数据删除策略和逐出算法对于保证数据库的高效运行至关重要。本文将深入探讨 Redis 中的这两种机制。 首先,我们来看数据的存储和有效期。在 Redis 中,每个键值对都有可能...
定时清理是通过 Redis 配置项 hz 定义的 serverCron 任务的执行周期,默认每次清理时间为 25ms,每次清理会依次遍历所有 DB,从 db 随机取出 20 个key,如果过期就删除,如果其中有 5 个 key 过期,那么就继续对这个...
Redis中的缓存失效策略是指当内存不足时,如何选择并删除部分缓存数据以释放空间。为了确保系统的稳定运行,合理设置缓存失效策略是非常重要的。 ##### 1. 影响生存时间的操作 - **DEL命令**:删除整个key,从而...
当 `maxmemory-policy` 设置后,Redis 在处理每个命令时都会检查内存使用情况,如果需要,会根据策略删除键。这一过程发生在 `processCommand(redisClient *c)` 函数中。 总结来说,Redis 的键淘汰策略是内存管理...
2.6 删除成员:`ZREM key member [member ...]`,从有序集合中移除一个或多个成员。 2.7 计数操作:`ZCARD key`,返回有序集合的成员数量。`ZCOUNT key min max`,返回分数在指定范围内的成员数量。 2.8 操作集合...