美文网首页数据库
Redis的缓存穿透与缓存雪崩

Redis的缓存穿透与缓存雪崩

作者: 知止9528 | 来源:发表于2019-02-10 23:35 被阅读76次

    缓存穿透
    缓存一般是 Key-Value 方式存在,当某一个 Key 不存在时会查询数据库,假如这个 Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。

    主要解决方案:
    对结果为空的数据也进行缓存,当此 Key 有数据后,清理缓存。
    一定不存在的 Key,采用布隆过滤器,建立一个大的 Bitmap 中,查询时通过该 Bitmap 过滤。

    布隆过滤器

    有点类似于hashMap即通过hash后,在数组中找到对应的位置,只是布隆过滤器是一个位数组,即每个位置只有0和1两个值,通常用于大数据的去重,比如一个int类似四个字节,一个字节八位,那么就只用占用原来的1/32的空间

    布隆过滤器实质上就是用二进制来表示一个数,比如我们有一个数组,数组内的元素分别是1,4,6,9,10
    那我们找到最大的数10,用二进制表示就是1010,则初始化的布隆过滤器数组长度就是4,表示1时布隆过滤器数组里面的值就0001,表示6时布隆过滤器里面的值就是0110,其它的同理,这也是为什么布隆过滤器还可以用来排序的原因,当然布隆过滤器也优点类似于基数排序,感兴趣的可以自行百度.当然这种排序和数据状况有关,比如说我们上面最大的数是1000,那么我们就要初始化1000对应的二进制的数的长度的数组,但其中有很多空间我们是没有用到的,就会造成浪费.
    其次布隆过滤器还有一点不同的是不只是通过一个hash函数进行哈希运行,而是通过K个hash函数
    通过布隆过滤器来去重是有误差的,但也只是会发生好像见过你的错觉,即如果布隆过滤器里面存在,那么它就一点能判断出来,但是如果不存在,它也会有认为你存在的那种概率

    缓存雪崩

    缓存雪崩.png

    相关文章

      网友评论

        本文标题:Redis的缓存穿透与缓存雪崩

        本文链接:https://www.haomeiwen.com/subject/tiwysqtx.html