为什么C语言依然是必学的编程语言
2016年总统大选,和特朗普一起走上风口浪尖的是Facebook,假新闻一度成为了学界业界热议的话题。这个社交媒体巨头受到了来自各方的批评,人们认为,Facebook拒绝审查核实其平台上列出的新闻真实性这一做法危害性很大。 它纵容了虚假新闻和具有误导性信息的传播,这为阴谋论提供了温床。譬如,有传言说俄罗斯影响了那次大选结果。几年后,马克·扎克伯格现身国会回答了这一系列问题,美国议员指责Facebook的CEO在2020年大选前允许政治虚假信息传播。 在紧张气氛中,扎克伯格被问及政治广告活动缺乏事实核查的问题。亚历山大·奥卡西奥·科尔特斯问道:“我能在初选时针对共和党人投放广告,说他们支持绿色新政吗?”扎克伯格大吃一惊,他无法回答这个问题。 越来越多的民众意识到得采取行动打击虚假内容。在社交媒体上阅读新闻是一把双刃剑。它成本低廉,容易获取,人们可以与全球事务保持同步,与他人分享新闻,也分享他们的想法。 然而,这种优势常常被病毒式营销所利用。比如尽管有些低质量新闻包含虚假事件,这些新闻还是会被传播开来。社交媒体上的假新闻形式多样,人们创建一些恶意账户来传播假新闻,如喷子、电子人用户、水军等等。
虚假新闻的迅速传播会对社会产生负面影响,它会助长错误认知,2016年总统大选期间最受欢迎的政治新闻本身就是虚假事实。因此,在媒体上寻找基于事实的新闻是非常有必要的。 这样一来,虽然缓存中存在着一个value为空的数据,但是至少他能表示“数据库里也没有不用找了”。 其实这个思路和布隆过滤器有些类似,但是它对内存的消耗会大很多,毕竟布隆过滤器是利用的bit位来存储。不过这种方式的优势是前面提到的,不会出现误差,而布隆过滤器的错误率会随着「位数」的增加而减少,会不断趋近于0,但不会为0。 总结 好了,我们一起总结一下。 这次呢,Z哥主要和你聊了隐藏在缓存中的两颗具有“毁灭性”的种子,「缓存雪崩」和「缓存穿透」,以及应对这两颗种子的常用方式。 而且,顺便帮你区分清楚了「缓存雪崩」和「缓存穿透」的差异。
希望对你有所启发。 在这种场景下,缓存的作用完全失效,每次请求都“穿透”到了DB中。 可能你会想,为什么会存在大量的这种db中数据不存在的情况呢?其实,任何依赖外部参数进行查询的地方都可能有这个问题的存在。比如,一个文本输入框,本来是让你输入用户名的,但是手误输入了密码,自然就找不到数据咯。更主要的问题是,会有恶意分子利用这种机制来对你的系统进行攻击,击穿缓存搞垮你的数据库,导致整个系统全面瘫痪。 同样也有两种方式来解决这个问题。 布隆过滤器(bloomfilter) 布隆过滤器就是由一个很长的二进制向量和一系列随机映射函数组成,将确定不存在的数据构建到过滤器中,用它来过滤请求。这里就放个图,具体就不展开了,后续我们再聊(有兴趣的可以先到搜索引擎搜《Space time trade-offs in hash coding with allowable errors》找到bloom的原始论文)。 实现代码其实并不很复杂,参考论文或者网上其他作者的一些实现就可以写出来。 不过,布隆过滤器有一个最大的缺点,也是其为了高效利用内存而付出的代价,就是无法确保100%的准确率。 所以,如果你的场景要求是100%准确的,就只能用下面这种方式了。 缓存空对象
其实就是哪怕从db中取出的数据是“空(null)”,也把它丢失到缓存中。 (编辑:阿坝站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |