使用Redis - 一定要注意的情况

mac2026-01-16  4

以前使用从来没有考虑过这种情况, 突然读到UC的文章,才想到这个问题.

什么问题呢?

那就是, 通常使用情况下, 我们会将DB中的数据缓存到redis中一份, 有增删改时,在更新, 

每次读时, 先从redis中拿, 如果没有再到DB中拿.

也就是用DB来兜底. 这样做的话, 就出现一个问题, 

如果是恶意攻击的话, 参数名及个数都对上的话, 那就真的到redis中取了, 但 redis保存的key未拿到值,

就转到去DB里拿, 依然啥都没拿到, 返回空.

关键问题, 一个攻击请求就这么被放进来了, 还访问的DB, 我靠....

如果是请求轰炸呢,  DB要崩了

所以, 就要想办法不让他轻易地访问DB, 或者请求的值如果不存在, 就舍弃请求.

 

办法1: 第一次请求redis放,  DB放, 返回空,  在返回之后, 将该key值存到redis一份, 值为空, 也就是只有第一次请求时放行到DB的, 

其余只到redis就返回了, 毕竟redis的抗压比DB强大的多.

方法2: UC文章推荐的, 布隆过滤器, 不知道咋用. 

最新回复(0)