杰网资源 Design By www.escxy.com

在并发式的项目当中,一定要考虑一个缓存穿透的情况。那么什么是缓存穿透呢?简单的说来,就是当大量请求的key根本不在缓存当中,所以导致了请求直接到了数据库上,根本没有经过缓存这一层。比如一个黑客故意制造我们缓存中不存在的key发送大量的请求,就会导致请求直接落到数据库上。

也就是说,缓存穿透就是:1.缓存层不命中。2,存储层不命中,不将空的结果写回缓存。3,返回空结果给客户端。

一般mysql的默认最大连接数是150左右,当然这个是可以用show variables like ‘%max_connections%'命令来查看。

当然这只是一个指标,cpu磁盘内存网络等等原因都影响了他的并发能力,所以一般3000的并发请求就可以杀死大部分的数据库。

那么出现缓存穿透的时候需要怎么应对呢?

1)最基本的方式就是做好参数校检,比如不合法的请求就直接抛出异常信息给客户端,就比如设置查询条件id不能小于0或者传入邮箱格式不正确时直接返回错误消息给客户端。但是这样还是会出现缓存穿透的现象。那么还可以通过下面几个方案来解决:

2)缓存无效的key,如果数据库和缓存都找不到某个key的数据,就直接写一个到redis中并设置它的过期时间 set key value EX 10086。这种方式可以解决请求的key变化不频繁的情况,如果遇到专门的黑客攻击就不能解决这个情况。但是如果依然想用这个方法的话,那么在设置过期时间的时候,时间短一点,比如是一分钟。多说一句设置key的格式一般是:表名:列名:主键名:主键。

3)利用布隆过滤器:布隆过滤器是一个非常神奇的数据结构,通过这个过滤器可以帮助我们非常方便的去判断一个给定的数据是否存在于海量的数据当中。所以布隆过滤器在针对数据去重和验证数据的合法性时是非常有用的,布隆过滤器的实质就是一个bit(位)数组。也就是说每一个存进的数据都仅仅只占一位,在数据结构上来说相当于List、Map、Set等数据结构,但是占用的空间更少而且效率更高,但是缺点是它返回的值是概率性的,并不是多么的准确。当一个元素加入到布隆过滤器的时候:1.使用布隆过滤器当中的哈希函数对元素值进行计算,得到哈希值。2.根据得到的哈希值,在位数组中把对应的下标改为1。那么设置完成之后,我们要怎么判断一个元素是否存在于布隆过滤器当中呢?

首先我们要根据给定的元素再次进行hash计算;得到值之后判断数组中的每个元素是否都为1,如果值都为1的话,那么说明这个值在过滤器当中,如果不为1的话,就说明不再过滤器当中。

举个非常简单的例子

Redis缓存穿透出现原因及解决方案

如上图所示,当字符串要加入到布隆过滤器当中时,该事务首先由多个哈希函数生成不同的哈希值,然后在对应的位数组的下标的元素设置位1,当二次存储相同的字符串时,因为先前的对应位置已经存在,所以在去重的时候非常方便。如果我们需要判断某个字符串是否在布隆过滤器当中时,只需要对给定的字符串再次进行相同的哈希计算,得到的值判断是否为1,从而判断数据是否存在于布隆过滤器当中,那么假如布隆过滤器说明一个数据存在时,很小的概率会误判,但是如果说明一个数据不存在时,那么一定是不存在的。

那么通过这个原理,利用redis布隆过滤器来将所有可能存在请求的值放在布隆过滤器当中,当用户请求时,直接判断用户发送来的请求是否存在于布隆过滤器中,不存在的话,直接返回请求参数错误信息给客户,存在的话就继续往下面走流程。

Redis缓存穿透出现原因及解决方案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

标签:
Redis,缓存穿透

杰网资源 Design By www.escxy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
杰网资源 Design By www.escxy.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。