redis怎么处理过期底层原理
-
Redis 是一个常用的开源内存数据库,它采用了基于内存的数据结构和持久化技术,能够高效地处理大量的数据。在 Redis 中,过期键的处理是其中一个重要的功能。下面就是 Redis 处理过期键的底层原理:
-
内部数据结构:Redis 内部使用了一个字典数据结构来存储键值对,该字典使用哈希表作为底层实现,它可以快速地通过键来查找值。对于每个键,Redis 都会维护一个过期时间。
-
过期键处理策略:Redis 采用了惰性删除和定期删除两种策略来处理过期键。
-
惰性删除:当用户对某个键进行读写操作时,Redis 会先检查该键是否已过期。如果过期,则会立即删除该键。这种策略可以保证及时地删除过期键,但会增加每次读写操作的时间复杂度。
-
定期删除:Redis 会定期地对数据库中的键进行检查,删除过期的键。为了提高效率,Redis 并不会检查所有的键,而是随机选择一部分键进行检查。可以通过配置文件中的参数来设置定期删除的频率。
-
-
过期键的删除过程:当 Redis 检查到某个键过期时,会执行以下操作来删除该键。
- 标记删除:Redis 会将过期键的过期时间设置为当前时间,同时标记该键为“待删除”状态。
- 过期键的删除:在接下来的定期删除操作中,Redis 会遍历数据库中的键,找到标记为“待删除”的键,并进行删除操作。这个过程会比较耗时,因此 Redis 尽量将过期键的删除工作分散到多次操作中。
-
过期键的内存回收:当一个过期键被删除后,Redis 并不会立即释放这个键所占用的内存空间,而是将这部分内存空间放入一个空闲链表中,以供下一次写操作使用。这种方式可以提高写操作的速度。
总结起来,Redis 处理过期键的底层原理是采用了惰性删除和定期删除两种策略。惰性删除可以及时地删除过期键,但会增加读写操作的时间复杂度;定期删除会定期地对数据库中的键进行检查,删除过期的键,以避免过期键积累过多。同时,过期键的处理还涉及内存的回收,以提高写操作的性能。
1年前 -
-
Redis是一个高性能的键值存储系统,常用于缓存、分布式锁等场景。过期是Redis的一个重要特性之一,它可以自动删除过期的键值对,以减少内存占用和提高性能。下面将介绍Redis处理过期的底层原理。
- 过期策略
Redis使用了两种不同的过期策略:定时删除和惰性删除。
- 定时删除:Redis会为每个设置了过期时间的键值对创建一个定时器,用于在键过期时删除该键值对。定时器以距离键过期的时间作为排序依据,时间最短的键值对会最先被处理。
- 惰性删除:Redis并不是立即删除过期的键值对,而是在访问键时进行检查。如果发现键已经过期,则会删除该键值对并返回空值。这样可以延迟删除过期键值对的时间,减少删除操作的频率。
- 过期键的检查
Redis使用了两种不同的方式进行过期键的检查:定时检查和惰性检查。
- 定时检查:Redis会随机抽取一定数量的键,并检查它们的过期时间。如果发现有过期的键,则删除该键值对。
- 惰性检查:在进行读写操作时,Redis会检查过期时间。如果发现键已经过期,则删除该键值对并返回空值。
- 过期键的删除
当一个键过期时,Redis并不会立即删除该键值对。而是通过将键标记为过期,然后等待合适的时机进行删除。
Redis使用了两种删除过期键值对的方法:定期删除和惰性删除。
- 定期删除:Redis会随机选择一部分过期键值对进行删除。这个操作由配置文件中的参数
hz控制,每秒执行的次数由此参数决定。 - 惰性删除:在进行读写操作时,Redis会检查过期时间。如果发现键已经过期,则删除该键值对并返回空值。
- 内存回收
当一个键值对被删除后,Redis并不会立即回收其所占用的内存。而是通过一个专门的内存回收器来进行内存回收。
Redis使用了两种内存回收的方式:惰性回收和定期回收。
- 惰性回收:当删除键值对后,Redis会将该键放入一个专门的内存回收链表中。当需要内存时,Redis会在这个链表中选择一些键,并回收其所占用的内存。
- 定期回收:Redis会周期性地进行内存回收操作。有一个专门的线程会定期扫描内存回收链表,并回收过期的键值对所占用的内存。
- 过期键的增量删除
当过期键的数量较多时,每次删除所有过期键值对可能会影响Redis的性能。为了解决这个问题,Redis引入了增量删除的方式。
增量删除是指在一次操作中不删除所有过期键值对,而只删除部分过期键值对。这样可以将删除操作均摊到多次操作中,减少删除操作对性能的影响。
总结:
Redis处理过期的底层原理涉及到过期策略、过期键的检查、过期键的删除和内存回收等方面。定时删除和惰性删除是两种不同的过期策略,定时检查和惰性检查是过期键的检查方式,定期删除和惰性删除是过期键的删除方式,惰性回收和定期回收是内存回收的方式,增量删除是处理过期键较多的优化手段。这些机制共同工作,确保Redis能够高效地处理过期键值对,提升系统性能和资源利用率。1年前 - 过期策略
-
Redis处理过期的底层原理主要包括两个部分:过期键检测和键的过期策略。
一、过期键检测
在Redis中,过期键检测是通过定期、惰性和从键空间中删除过期键三种方式来完成的。
-
定期删除:Redis会每隔一段时间执行一次主动删除过期键的操作,这个时间由配置参数
hz决定,默认为10秒。具体流程如下:
a. Redis服务器会使用一个全局的废弃链表,它保存了所有需要被删除的过期键。
b. 在每次执行定期删除操作时,Redis服务器会检查部分数据库的一部分键,并从中找出过期的键,将这些键添加至废弃链表。
c. 删除废弃链表中的键。 -
惰性删除:Redis在访问某个键时,会检查该键是否过期,如果过期则立即删除。这种方式的优点是可以确保键的过期时间尽可能地精确,缺点是会增加访问键的时间。
-
从键空间中删除过期键:在对键进行读写操作时,Redis会先检查该键是否过期,如果过期则先删除该键,然后再执行实际的操作。这个过程被称为“过期键检测”。
二、过期策略
Redis使用一种称为惰性删除和定期删除结合的过期策略来处理过期键。
-
惰性删除:当访问一个键时,Redis会检查该键是否过期,如果过期则立即删除。这种策略能够保证过期键被及时删除,但是会增加访问键的时间。
-
定期删除:Redis会每隔一段时间执行一次主动删除过期键的操作。定期删除能够批量删除过期键,减少惰性删除的次数,提高性能。
综上所述,Redis处理过期的底层原理是通过定期删除、惰性删除和从键空间中删除过期键三种方式来完成的。定期删除和惰性删除结合的过期策略能够保证过期键被及时删除,并提高性能。
1年前 -