写更新缓存数据代码时,先删除缓存,然后再更新数据库感觉可行

2020-10-29 00:48:07 +08:00
 seekjobs

写更新缓存数据代码时,先删除缓存,然后再更新数据库的方法,如果改变下删除缓存的方式,是可以简单地解决问题地

先删除缓存,可以不是真的删除:可以改为软删除,记录缓存的 version 和过期时间(比数据库过期时间长一秒就可以)——当查询操作操作发现软件删除时,会直接从数据库取数据,数据库数据的 vesion 小于等于缓存 version 时就不更新缓存,大于缓存 version 时就更新。

如果数据库操作失败,就真删除缓存,如果删除缓存失败,因为有过期时间兜底,问题不会太大。

如果数据库操作成功,有查询操作就会更新缓存。

2173 次点击
所在节点    随想
4 条回复
geebos
2020-10-29 00:52:49 +08:00
没必要弄个 version,更新缓存的代价可以忽略不计,你这还加个 version 字段反而把问题搞复杂了
Leigg
2020-10-30 08:39:45 +08:00
血崩考虑过不
seekjobs
2020-10-31 21:53:20 +08:00
@Leigg 这样做缓存会命中,所以缓存不会雪崩,但仍然取数据库,但只要操作数据库后删除缓存顺利,这个时间很短,取的数据又是存在的数据,数据库不会被穿透。也许可以加一个计数,计数太多可以理解为有意的攻击,不取数据库直接返回错误就好
seekjobs
2020-10-31 21:57:48 +08:00
@geebos 谢谢,version 确实可以不要的

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

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

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

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

© 2021 V2EX