一、背景
我们都知道 Redis 是一种内存数据,所有的数据均存储在内存中,可以通过 ttl
指令查看数据的状态:
xx
:表示具有时效性的数据。-1
:表示永久性的数据。-2
:表示过期的数据,或已经删除的数据,或未定义的数据。
但是 过期的数据真的被删除了吗?
- 在 Redis 的执行过程中,会让 CPU 处理很多的指令,CPU 可能会一下子处理不过来,这样就需要区分优先级了。
- 很明显 Redis 的 key 过期删除操作没有那么重要,所以就先不删除,继续保存在内存中。
- 那什么时候删除呢?这就是 Redis 的删除策略做的事了。
删除策略的目标: 就是 在内存和 CPU 占用之间找到一个平衡,在 CPU 空闲的时候再去删除过期的数据,防止出现 CPU 过载导致服务器宕机、内存泄漏等问题。
二、Redis 的三种删除策略
Redis 有以下三种删除策略:定时删除、
2.1 定时删除(用CPU换内存空间)
实现方式: 创建一个定时器,每间隔一段时间,定时器会 对全量 key 的扫描,并删除过期的 key。
- 优点: 节约内存,可以定期立即释放掉所有不必要的内存空间。
- 缺点:<