服务器的缓存穿透及解决方案
【小编提醒】本文部分内容源于网络,不代表本站观点!若有了解“服务器的缓存穿透及解决方案”等有关服务器、云主机租用、托管、配置、价格问题,请免费咨询YINGSOO客服,获取最新优惠!
【主机上新】美国G口服务器特价 | 法国云服务器特价 | 台湾200M服务器特价
【相关阅读】购买海外云服务器要注意什么?注意这三大误区
1.什么是缓存穿透
缓存穿透其实是指从缓存中没有查到数据,而不得不从后端系统(比如数据库)中查询的情况。
什么样的缓存穿透对系统有害呢?答案是大量的穿透请求超过了后端系统的承受范围,造成了后端系统的崩溃。
一个经典场景:读取一个用户表中未注册的用户。
缓存的读写策略常采用 cache Aside 策略。按照这个策略,先读缓存,再穿透读数据库。由于用户并不存在,所以缓存和数据库中都没有查询到数据,因此也就不会向缓存中回种数据(也就是向缓存中设置值的意思)。
这样当再次请求这个用户数据的时候还是会再次穿透到数据库。在这种场景下,缓存并不能有效地阻挡请求穿透到数据库上。
2.解决方案
有两种:
回种空值以及使用布隆过滤器。
回种空值比较简单,但需要占用大量存储空间,使用的时候应该评估一下缓存容量是否能够支撑。
而布隆过滤器维护了一个数组,可以用来迅速判断一个元素是否存在,那么当我们需要查询某一个用户的信息时,我们首先查询这个 id 在布隆过滤器中是否存在,如果不存在就直接返回空值,而不需要继续查询数据库和缓存,这样就可以极大地减少异常查询带来的缓存穿透。
但布隆过滤器有两个缺陷:
1. 它在判断元素是否在集合中时是有一定错误几率的,比如它会把不是集合中的元素判断为处在集合中(Hash 算法的问题)
布隆过滤器虽然存在误判的情况,但是还是会减少缓存穿透的情况发生,只是需要尽量减少误判的几率,这样判断正确的几率更高,对缓存的穿透也更少。一个解决方案是:
使用多个 Hash 算法为元素计算出多个 Hash 值,只有所有 Hash 值对应的数组中的值都为 1 时,才会认为这个元素在集合中。
2. 不支持删除元素。
最后,对于极热点缓存数据穿透造成的“狗桩效应”,可以通过设置分布式锁或者后台线程定时加载的方式来解决。
热门节点:香港服务器去首页注册有礼!YINGSOO推出PHA挖矿服务器、PHA挖矿教程、Chia奇亚服务器、Swarm物理节点服务器、Swarm母鸡服务器、Swarm云节点服务器、《Phala PHA挖矿资料大全》、《swarm bzz挖矿资料大全》,Swarm Bee节点租用请咨询YINGSOO客服!
版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。