关于 redis 的持久化和数据淘汰策略

2020-02-13 10:22:47 +08:00
 haikuo93

我们知道 redis 有两种持久化策略,也有几种数据淘汰策略,那假如一条数据已经被持久化到磁盘里,之后很长时间都没有被访问过,触发了 LRU 淘汰机制,那后面再 GET 这条数据的时候,还会去磁盘里找到这条数据吗

7152 次点击
所在节点    Redis
3 条回复
star00
2020-02-13 10:55:24 +08:00
不会
pudgedoor
2020-02-13 11:02:23 +08:00
首先,GET 的时候不是去磁盘找,而是去内存。Redis GET 操作的时候发现 Key 过期了不会返回值这个 val。

另外对于 RDB 的过期 key:
如果服务器以主服务器模式运行,那么在载入 RDB 文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会被忽略,所以过期键对载入 RDB 文件的主服务器不会造成影响。❑如果服务器以从服务器模式运行,那么在载入 RDB 文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。不过,因为主从服务器在进行数据同步的时候,从服务器的数据库就会被清空,所以一般来讲,过期键对载入 RDB 文件的从服务器也不会造成影响。
对于 AOF 的过期 key:
当过期键被惰性删除或者定期删除之后,程序会向 AOF 文件追加( append )一条 DEL 命令,来显式地记录该键已被删除。然后最终在 AOF 重写时,这条 DEL 和 SET 会被彻底干掉。
haikuo93
2020-02-13 11:05:43 +08:00
@pudgedoor 明白了,多谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644219

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX