Redis 的过期策略是怎么样的?

1 个回答

  • 李寒衣
    世界上没有快乐的地方,只有快乐的人。
    ### Redis 过期策略 Redis 提供了设置过期时间的机制,通过 `EXPIRE`、`EXPIREAT`、`PERSIST` 等命令控制键值对的生命周期。过期时间设置后,Redis 会根据以下策略来删除过期的键: #### 1. **定期删除**(Periodic Deletion) Redis 默认每隔 100 毫秒就会随机检查一些设置了过期时间的键,并检查它们是否已过期。如果某个键已经过期,Redis 会主动删除它。定期删除有助于保证过期的键能及时被清理,但这也意味着 Redis 需要定期扫描一部分键,并消耗一定的 CPU 资源,可能影响性能。 #### 2. **惰性删除**(Lazy Deletion) 当客户端访问一个键时,Redis 会检查该键是否已过期。如果已过期,Redis 会删除这个键并释放内存。惰性删除节省了 CPU 资源,但可能会导致过期的键仍然占用内存,直到该键被访问为止。 #### 3. **结合使用**: Redis 默认同时开启定期删除和惰性删除策略,以确保: - **定期删除**:主动清理过期键,减少过期键占用的内存。 - **惰性删除**:避免不必要的计算和资源消耗,仅当过期键被访问时才进行删除。 #### 内存回收: - Redis 不会立即释放内存,而是将过期键标记为“已过期”并将其放入专门的链表中。当内存使用率达到一定阈值时,Redis 会进行内存回收,实际释放占用的内存。 - 这些被删除的键的内存会被操作系统标记为“可重用的内存”,但并不意味着这些内存会立即归还给操作系统,可能会在未来的内存分配中被重用。 ### **过期时间设置与命令**: - **EXPIRE**:设置某个键的过期时间(秒)。 - **EXPIREAT**:设置某个键的过期时间,过期时间为指定的时间戳。 - **PERSIST**:移除键的过期时间,使键永不过期。 ### Redis 是否立即删除过期键? 过期键 **并不会立即删除**,而是采取定期删除和惰性删除的策略。具体而言: - 如果过期键没有被访问,可能会等到 Redis 定期删除任务触发时才会被删除。 - 如果过期键被访问,Redis 会在惰性删除过程中清除它。 因此,过期键的删除过程是延迟的,并不是即时发生的。
    发布于 2025-02-18 17:34 •IP属地 浙江
    举报
    评论
    收藏