返回
揭秘 Redis 神奇机制:过期数据并不马上删除
见解分享
2023-09-16 21:36:18
很多人认为Redis中的数据在设置过期时间后就会立刻消失,但事实并非如此。Redis实际上是通过一种叫做过期键存储 的数据结构来管理过期键。
在Redis内部,过期键会以一种名为跳跃表 的数据结构进行存储。跳跃表是一种高效的有序数据结构,可以快速地插入、删除和查找数据。通过这种结构,Redis可以高效地管理过期键,并对它们进行快速访问。
一、Redis 删除过期数据策略
Redis 中过期数据虽然不会马上删除,但为了确保Redis中的数据是有效的,Redis会定期检查数据库中的数据,并删除过期的数据。这种检查的策略叫做内存淘汰策略 。
Redis 提供了多种内存淘汰策略,默认使用的是LRU(最近最少使用)策略 。LRU 策略会根据键的最后一次被访问时间来决定是否删除,最近最少使用的键会被优先删除。
二、Redis 过期键存储
Redis 使用一个专门的内存空间来存储过期键,这个内存空间叫做过期键存储 。当一个键被设置为过期后,它就会被移到过期键存储中。在过期键存储中,键会以其过期时间作为键进行存储。
Redis 会定期检查过期键存储中的键,如果某个键的过期时间已经到了,那么这个键就会被删除。Redis 会在后台运行一个线程来检查过期键,这个线程每隔一定时间(默认是1秒)就会运行一次。
三、Redis 配置过期删除策略
Redis的过期删除策略可以通过配置文件redis.conf进行配置,其中三个主要的参数包括:
- maxmemory: 设置Redis的最大内存限制
- maxmemory-policy: 设置Redis的内存淘汰策略
- maxmemory-samples: 设置Redis在淘汰数据时从已过期数据集中随机抽取的样本数。
四、操作步骤
- 修改Redis配置文件redis.conf
将以下三行添加到redis.conf配置文件中:
maxmemory 256mb
maxmemory-policy volatile-lru
maxmemory-samples 5
- 重启Redis服务
执行以下命令重启Redis服务:
service redis restart
- 设置键的过期时间
使用SETEX命令为键设置过期时间,例如:
SETEX mykey 10 "Hello, world!"
- 查看过期键
使用EXPIREAT命令查看键的过期时间,例如:
EXPIREAT mykey 1580831630
- 删除键
使用DEL命令删除键,例如:
DEL mykey
通过以上操作,我们可以看到Redis的数据过期了并不会马上删除,而是根据配置的过期删除策略来删除。