From 80cb1f2c3459fd318f24bc88ef818d0cd3b48dc3 Mon Sep 17 00:00:00 2001 From: Kun Liu <996529090@qq.com> Date: Sat, 24 Jul 2021 14:06:35 +0800 Subject: [PATCH] docs: update caching penetration content (#232) * docs: update caching penetration content * Update redis-caching-avalanche-and-caching-penetration.md Co-authored-by: Yang Libin --- .../images/redis-caching-avoid-penetration.png | Bin 0 -> 8890 bytes ...-caching-avalanche-and-caching-penetration.md | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 docs/high-concurrency/images/redis-caching-avoid-penetration.png diff --git a/docs/high-concurrency/images/redis-caching-avoid-penetration.png b/docs/high-concurrency/images/redis-caching-avoid-penetration.png new file mode 100644 index 0000000000000000000000000000000000000000..13d02478ffbc91bb409383b43c7d09c175710aeb GIT binary patch literal 8890 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 DgPzC% literal 0 HcmV?d00001 diff --git a/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md b/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md index 457b3e6..ed54d3c 100644 --- a/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md +++ b/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md @@ -48,6 +48,15 @@ 解决方式很简单,每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 `set -999 UNKNOWN` 。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。 +当然,如果黑客如果每次使用不同的负数 id 来攻击,写空值的方法可能就不奏效了。更为经常的做法是在缓存之前增加布隆过滤器,将数据库中所有可能的数据哈希映射到布隆过滤器中。然后对每个请求进行如下判断: + +- 请求数据的 key 不存在于布隆过滤器中,可以确定数据就一定不会存在于数据库中,系统可以立即返回不存在。 +- 请求数据的 key 存在于布隆过滤器中,则继续再向缓存中查询。 + +使用布隆过滤器能够对访问的请求起到了一定的初筛作用,避免了因数据不存在引起的查询压力。 + +![redis-caching-avoid-penetration](./images/redis-caching-avoid-penetration.png) + ### 缓存击穿 缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。