Redis 过期策略和内存淘汰机制
众所周知,redis 是一个基于内存的,能够持久化到硬盘的缓存数据库,所以 redis 缓存服务器会配置较高的内存资源
一般而言,缓存总量小于数据总量,但如果对缓存数据不管不顾,内存资源总会有耗尽的时候,而为了节约成本,不能一直增加服务器的内存。因此在有限的资源下,为了支撑更多的业务,就必须将访问频率不高的缓存删掉,为新的缓存腾出内存空间
Redis 主要通过两种方式相互配合实现 key 的清理,即:过期策略和内存淘汰机制
过期策略
Redis 通过 Expire
命令设置 key
的过期时间,设置过期时间后, key 会被自动删除。通常称带有过期时间的 key 为易失的 (volatile);过期时间的 key,可以调用 EXPIPE
重新设置
过期时间计算
key
的过期时间以绝对 Unix
时间戳的方式存储,也就是无论 Redis 是否进行,过期时间都会流逝。即要求服务器的时间必须准确,否则但两个时间相差较多的机器之间移动 RDB 文件,那么可能会出现所有的 key 在加载的时候都过期。
测试:运行的 Redis 会不停检查服务器的时间,如果设置一个带有 1k 秒过期时间的 key,然后把服务器的时间向前调 2k 秒,那么这个 key 就会立刻过期,而不是等待 1k 秒后过期