缓存穿透
在实际中,Redis没有起到缓存的作用,请求还是到了数据库,对数据库造成了很大的压力。比如说:用户在请求一条数据,这个数据在数据库中不存在,那么缓存中也不会存在,用户在发起很多次请求的时候,都会绕过Redis,而直接访问数据库,这就是缓存穿透。
处理方式:
-1:将查询到空的数据也放置到缓存中,设置一个过期时间。
-2:采用布隆过滤器
布隆过滤器
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
缓存+布隆过滤器:布隆过滤器将缓存的key,通过随机映射函数,映射到二进制向量中。将二进制中0改为1.二进制同一个位置,可能会有多个映射,这样在查询的,就会造成一定的误识别率。
布隆过滤器可以判断值一定不存在,但是不能判断一定存在(因为误识别率)
缓存雪崩
在生产环境中,某一个时期有大量地key过期,恰好这个时候有大量地请求过来,这些请求就都会直接打在数据库上,造成数据库的很大的压力,甚至宕机。这就是缓存雪崩。
处理方式:
-1:key不过期
-2:错开key过期时间
-3:多缓存并用,比如Redis+
-4:采购第三方的Redis