以前使用从来没有考虑过这种情况, 突然读到UC的文章,才想到这个问题.
什么问题呢?
那就是, 通常使用情况下, 我们会将DB中的数据缓存到redis中一份, 有增删改时,在更新,
每次读时, 先从redis中拿, 如果没有再到DB中拿.
也就是用DB来兜底. 这样做的话, 就出现一个问题,
如果是恶意攻击的话, 参数名及个数都对上的话, 那就真的到redis中取了, 但 redis保存的key未拿到值,
就转到去DB里拿, 依然啥都没拿到, 返回空.
关键问题, 一个攻击请求就这么被放进来了, 还访问的DB, 我靠....
如果是请求轰炸呢, DB要崩了
所以, 就要想办法不让他轻易地访问DB, 或者请求的值如果不存在, 就舍弃请求.
办法1: 第一次请求redis放, DB放, 返回空, 在返回之后, 将该key值存到redis一份, 值为空, 也就是只有第一次请求时放行到DB的,
其余只到redis就返回了, 毕竟redis的抗压比DB强大的多.
方法2: UC文章推荐的, 布隆过滤器, 不知道咋用.