我们知道 redis 有两种持久化策略,也有几种数据淘汰策略,那假如一条数据已经被持久化到磁盘里,之后很长时间都没有被访问过,触发了 LRU 淘汰机制,那后面再 GET 这条数据的时候,还会去磁盘里找到这条数据吗
1
star00 2020-02-13 10:55:24 +08:00
不会
|
2
pudgedoor 2020-02-13 11:02:23 +08:00 2
首先,GET 的时候不是去磁盘找,而是去内存。Redis GET 操作的时候发现 Key 过期了不会返回值这个 val。
另外对于 RDB 的过期 key: 如果服务器以主服务器模式运行,那么在载入 RDB 文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会被忽略,所以过期键对载入 RDB 文件的主服务器不会造成影响。❑如果服务器以从服务器模式运行,那么在载入 RDB 文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。不过,因为主从服务器在进行数据同步的时候,从服务器的数据库就会被清空,所以一般来讲,过期键对载入 RDB 文件的从服务器也不会造成影响。 对于 AOF 的过期 key: 当过期键被惰性删除或者定期删除之后,程序会向 AOF 文件追加( append )一条 DEL 命令,来显式地记录该键已被删除。然后最终在 AOF 重写时,这条 DEL 和 SET 会被彻底干掉。 |