【技术实现步骤摘要】
一种解决布隆过滤器误判缓存数据的方法及系统
[0001]本专利技术涉及缓存数据
,特别是一种解决布隆过滤器误判缓存数据的方法及系统。
技术介绍
[0002]在大流量系统的设计中,为了保护数据库,会增加缓存,以此提高系统性能,并且减少数据库的压力。缓存的设计中存在一个缓存穿透的问题:频繁查询一个不存在的数据,缓存无法命中,查询穿过缓存,一直前往数据库进行无效查询。解决这个问题常见的方式是增加布隆过滤器来判断数据是否存在,但是布隆过滤器并不适合“零错误”的场景,它是一种只增不减的算法,所以如果数据从数据库删除,布隆过滤器不能删除,因为布隆过滤器的下标位可能是共享的,删除布隆过滤器可能会导致其他数据被误删。所以如果1条数据在数据库被删除了,但在布隆过滤器中还存在,那么就会持续进行数据查询,但此数据本身就不存在,所以攻击者可以利用此漏洞,对数据库发起攻击,导致缓存穿透,造成数据库压力激增。
技术实现思路
[0003]为克服上述问题,本专利技术的目的是提供一种解决布隆过滤器误判缓存数据的方法,能够解决布隆过滤器在数据缓存使用场景中存在误判的情况。
[0004]本专利技术采用以下方案实现:一种解决布隆过滤器误判缓存数据的方法,所述方法包括如下步骤:
[0005]步骤S1、设置位图bitmap初始长度,通过布隆过滤器算法bloomfilter对数据库每条数据的数据标识计算得到每条数据对应的3次hash结果,所述3次hash结果即为3个数字下标,根据3个数字下标将位图bitmap对应的存储bit ...
【技术保护点】
【技术特征摘要】
1.一种解决布隆过滤器误判缓存数据的方法,其特征在于:所述方法包括如下步骤:步骤S1、设置位图bitmap初始长度,通过布隆过滤器算法bloomfilter对数据库每条数据的数据标识计算得到每条数据对应的3次hash结果,所述3次hash结果即为3个数字下标,根据3个数字下标将位图bitmap对应的存储bit位置都置为1;步骤S2、收到数据查询请求后,通过布隆过滤器算法bloomfilter对要查询数据的数据标识计算得到3个下标位数值,根据3个下标位数值在位图bitmap中查询对应的bit位置是否都为1,如果存在0则返回数据不存在;如果否为1,则进入步骤S3;步骤S3、用要查询的数据的数据标识作为缓存key从缓存中查询数据,如果得到数据则直接返回数据,如果得到数据空标识"nil",则返回数据不存在,如果缓存中得不到任何数据则进入步骤S4;步骤S4、从数据库中查询数据,如果数据不存在,则存储数据空标识"nil"到缓存中,如果数据存在则存储数据到缓存中,并且根据所述3个下标位数值设置位图bitmap对应的存储bit位置都置为1,从而解决布隆过滤器误判。2.根据权利要求1所述的一种解决布隆过滤器误判缓存数据的方法,其特征在于:所述方法还包括维护位图bitmap的扩容和重建操作,所述扩容和重建操作为:定时检测位图bitmap的使用量是否超过75%,超过则把位图bitmap进行翻倍扩容,并且根据当前数据库数据重建位图bitmap,在新位图bitmap重建的过程中,设置数据库为只读状态,不允许删除数据,新位图bitmap重建完成后替换旧位图bitmap,并且移除数据库的只读状态。3.根据权利要求1所述的一种解决布隆过滤器误判缓存数据的方法,其特征在于:所述步骤S1进一步具体为:设置数据库中数据总量为N条数据,则设置位图bitmap初始长度为5N,遍历数据库中所有数据,把每条数据的数据标识通过布隆过滤器bloomfilter算法进行3次不同的hash调用,得到长度为5N内的3个数字下标,在位图bitmap对应的3个数字下标的存储bit位置都设为1,也就是3个存储bit位置都为1则代表该数据存在;利用该方式把N条数据的数据标识的对应位图bitmap下标的存储bit位置都设为1。4.根据权利要求1所述的一种解决布隆过滤器误判缓存数据的方法,其特征在于:所述步骤S4进一步具体为:通过布隆过滤器和缓存的判断是否存在后,如果都不存在,则表示此数据从未进行过数据库查询,则从数据库查询数据标识的数据,如果数据库不存在此数据,存储数据空标识"nil"到缓存中,以此告诉缓存数据不存在,后续无需再进行查询;如果在未来数据表示为数据标识的数据被新增至数据库中,则删除缓存中的空标识"nil",重新执行向数据库进行该数据的查询;如果数据库查询到该数据,则把数据存入缓存之中,以供下次查询能直接从缓存得到数据;并且根据所述3个下标位数值设置位图bitmap对应的存储bit位置都置为1。5.根据权利要求2所述的一种解决布隆过滤器误判缓存数据的方法,其特征在于:所述步骤位图bitmap的扩容进一步具体为:定时检测位图bitmap中值为1的个数是否超过bitmap总长度的75%,如果超过则表示随着数据量的增长,bitmap的碰撞概率会增加,需要对bitmap进行扩容重建,新建一个位图bitmap,容量为原先长度翻倍,由于长度的变化导致hash结果会不同,所以需要对bitmap数据进行重建,即重新遍历数据库中所有数据,把每条数据的数据标识通过布隆过滤器bloomfilter算法进行3次不同的hash调用,得到3个数字下标,在位图bitmap对应的3个数字下标的存储bit位置都设为1。
6.一种解决布隆过滤器误判缓存数据的系统,其特征在于:所述系统包括:位图设置模...
【专利技术属性】
技术研发人员:刘德建,叶伟,李佳,
申请(专利权)人:福建天晴数码有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。