缓存击穿的问题?

来源:9-1 保存无效的优惠劵数据到缓存中

慕用3599920

2020-06-09

老师你好:引用慕友的问题:“在getCachedCoupons这个接口中,通过userid和status向Redis查询优惠券数据,如果查询结果为空,则向Redis缓存中写入一条-1的数据,为什么要这样做呢,按我的理解从缓存中没查到数据不是应该再去查一次MySQL吗,如果MySQL中有数据就写进Redis缓存,如果MySQL中也没有数据才向缓存中写一条-1的数据。因为第一次查询的时候缓存里面肯定是没有数据的,如果因此就直接向缓存中写入-1的数据,那之后再查缓存就能查到-1的数据,就不会再去查数据库了,那这样岂不是永远查不到真实的数据了"跟慕友一样的疑问。
咱这里是 保存空的优惠券列表到缓存中,设置一个无意义的值,

用BloomFilter过滤器 是不是好一些?
先判断元素是否存在,在将数据库的数据添加到布隆过滤器中。
具体还没实现过

写回答

1回答

张勤一

2020-06-09

同学你好:

    关于缓存击穿的实现,我这里的实现是:

    (1)先去查询缓存,如果缓存为空,则去查询数据库;

    (2)如果数据库中也不存在数据,则写入 -1 数据到缓存中

    所以,你说的“幕友”,其实也是理解错误。

    关于你说的 BloomFilter,它的使用场景更为局限,可以查查资料,看看它是怎么使用的,我们这里的场景是不适用的。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
1
慕用3599920
非常感谢老师,现在一来就明白了,当时跟他一样的疑惑,理解错了。
2020-06-09
共1条回复

Spring Cloud微服务实战 打造企业级优惠券系统

微服务,SpringCloud,SpringBoot面试、毕设、

1203 学习 · 487 问题

查看课程