恶意攻击导致的redis缓存击穿的问题

  之前多次提到过缓存击穿后端雪崩问题。

# #   其实系统中多数的缓存都是这样来用的:

  程序有限查询缓存,缓存不存在,再查查询数据库。数据库顶不住了,就会造成服务器崩溃,数据库崩溃了,整个系统就挂掉了,也就是雪崩。

  比如登录这个功能,对于新用户,或者恶意攻击的用户肯定是在还从中不存在的。别人就利用这一点,就去恶意攻击。其实这个问题就是拿一个系统中本来不存在的东西去反复尝试,如果不去做防御的话,就会给服务器带来很大的压力,严重的话,服务器崩溃。

  所以这是一个海量数据检查存在不存在的问题。解决方案就是使用布隆过滤器。

# # 使用 redis 的 String 的字节数组

  根据string最大的是 512M ,换算后就是 2的32次方,大概就是四十亿的的长度。

 对hashcode进行过滤器长度的取余计算,然后将将对应的位置置为 1 。为1 就是存在。

 也就是这个问题变成了查询缓存前的布隆过滤器的检查工作。

 具体操作如下:在布隆过滤器里边先注册用户,其中10001 就是用户,接着对其取模,然后hashcode 对长度进行取余,得到的结果就是二进制数组的下标,将其置为1,代表着存在这个用户。用一个字节来存放一个用户,这就是布隆过滤器的用处所在。

# # 其中在redis 中操作的命令

 本质上还是一个String类型。

# # 了解布隆过滤器

# # 布隆过滤器的优缺点

发布了336 篇原创文章 · 获赞 295 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/star1210644725/article/details/104167335