问一个缓存穿透的技术问题

2021-03-08 15:27:07 +08:00
 BinYang

背景:在被访问数据库中没有的数据时,此时会访问 db 。线上 90%的数据都是数据库没有的(业务场景限定)。此时为了解决缓存穿透的问题,引入了 redis 设置空值。此时导致的结果是(数据是 n x n )的。导致线上 redis 有 3 亿的空值 key 。

解决思考:如果使用布隆过滤器,受限制于不能删除元素限制。不能使用,有什么更好的解决方案吗?

1027 次点击
所在节点    问与答
9 条回复
xiaoxinshiwo
2021-03-08 17:03:49 +08:00
把存在的数据的 key 全量存在 redis 中,命中再查数据库,再加载缓存?
redtea
2021-03-08 17:10:09 +08:00
redis 前面加一层,本地缓存。
BinYang
2021-03-08 17:39:06 +08:00
@xiaoxinshiwo 这个方案,有考虑过。这么做的话,相当于强依赖 redis (这样子设计是不是有点蛋疼),那么此时。服务就很危险。redis 挂掉,就完全没有兜底了。
BinYang
2021-03-08 17:39:37 +08:00
@redtea 这个怎么说?本地缓存,存什么呢?能具体点吗?
xiaoxinshiwo
2021-03-08 17:44:17 +08:00
@BinYang #3 redis 就是做这个事情的,担心挂掉就做集群啊
BinYang
2021-03-08 18:02:38 +08:00
@xiaoxinshiwo 这个解决方案,其实是 ok 的。除了,服务会强依赖缓存,这个目前来看。应该是最好的解决方式了。
#_# 不过强依赖 redis 还是有点蛋疼。
redtea
2021-03-08 18:03:23 +08:00
@BinYang 把原来要存 redis 的数据先存本地缓存,没有查 redis,再没有查数据库。这样降低 redis 访问压力,减少网络带宽占用。
zhuzhibin
2021-03-09 00:56:02 +08:00
@redtea 但是不是压力吃到 IO 去了吗?
xiaoxinshiwo
2021-03-09 09:06:46 +08:00
@BinYang #6 嗯,注意 redis 缓存不要被污染了,数据操作变更需要注意

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

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

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

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

© 2021 V2EX