Redis 服务挂了,一段时间后又恢复,不会造成缓存与数据库不一致吗?

201 天前
 yodhcn
Redis 服务挂了,一段时间后又恢复,如果这段时间能内,有修改数据库的操作,不会造成缓存与数据库不一致吗?

如果是 Redis 主从集群,能避免这种情况吗?集群全挂了呢?


注:目前解决缓存与数据库一致所使用的方案,是双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存,无缓存就读数据库后重建缓存

但这种方案的问题是,缓存服务挂了后,在写操作时无法删掉过期缓存,最后等缓存服务恢复,读操作读到的就是过期数据


请老哥们指点一下,
难道因为缓存服务挂掉,就拒绝一切写操作吗?
1905 次点击
所在节点    Redis
11 条回复
justthewayyouare
201 天前
不用 redis 就行了。
calmzhu
201 天前
加个监控啊,挂了恢复前清下缓存。
crysislinux
201 天前
集群挂了还说啥,站点就 down 呗。用 Redis 集群的站 Redis 挂了基本也没法儿提供服务了
devopsdogdog
201 天前
好好想想缓存是不是这样用,你都写 mysql 了,redis 不写就好了,只靠读的时候缓存一下。

缓存数据一般不用于这种需要强一致性的。
HuLiY
201 天前
双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存[并设置一个合适的过期时间],无缓存就读数据库后重建缓存
👆就可以了。
过期时间最好是随机的,避免缓存雪崩。
这种方案一般用于一致性要求低的场景。
HuLiY
201 天前
-----------上一条写错了----------------
双写方案,写操作-先写数据库再删缓存,读操作-有缓存就读缓存,无缓存就读数据库后重建缓存[并设置一个合适的过期时间]
👆就可以了。
过期时间最好是随机的,避免缓存雪崩。
这种方案一般用于一致性要求低的场景。
EarthChild
201 天前
那就做个标识啊,redis 读/写不成就做个标识,等读出来了,这个标识为 true ,就清空 redis 缓存,每次读/写 redis 前都判断一下这个标识都行了。
kuituosi
200 天前
严格来说就没有方法保证一致性,不管是双写还是集群。
对一致性要求高就不要缓存,普通的情况把过期时间设置足够短就可以
julyclyde
200 天前
再恢复的时候它应该是空白的,然后逐渐被双读操作给填充出来
而不是持有死之前那一份数据
hangszhang
200 天前
试试 binlog 同步到 redis 的方案
giiiiiithub
200 天前
这种场景可以在恢复后先清空缓存,清空后再给应用使用

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

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

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

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

© 2021 V2EX