背景:在被访问数据库中没有的数据时,此时会访问 db 。线上 90%的数据都是数据库没有的(业务场景限定)。此时为了解决缓存穿透的问题,引入了 redis 设置空值。此时导致的结果是(数据是 n x n )的。导致线上 redis 有 3 亿的空值 key 。
解决思考:如果使用布隆过滤器,受限制于不能删除元素限制。不能使用,有什么更好的解决方案吗?
1
xiaoxinshiwo 2021-03-08 17:03:49 +08:00
把存在的数据的 key 全量存在 redis 中,命中再查数据库,再加载缓存?
|
2
redtea 2021-03-08 17:10:09 +08:00
redis 前面加一层,本地缓存。
|
3
BinYang OP @xiaoxinshiwo 这个方案,有考虑过。这么做的话,相当于强依赖 redis (这样子设计是不是有点蛋疼),那么此时。服务就很危险。redis 挂掉,就完全没有兜底了。
|
5
xiaoxinshiwo 2021-03-08 17:44:17 +08:00
@BinYang #3 redis 就是做这个事情的,担心挂掉就做集群啊
|
6
BinYang OP @xiaoxinshiwo 这个解决方案,其实是 ok 的。除了,服务会强依赖缓存,这个目前来看。应该是最好的解决方式了。
#_# 不过强依赖 redis 还是有点蛋疼。 |
7
redtea 2021-03-08 18:03:23 +08:00
@BinYang 把原来要存 redis 的数据先存本地缓存,没有查 redis,再没有查数据库。这样降低 redis 访问压力,减少网络带宽占用。
|
9
xiaoxinshiwo 2021-03-09 09:06:46 +08:00
@BinYang #6 嗯,注意 redis 缓存不要被污染了,数据操作变更需要注意
|