Redis cache penetration, cache avalanche, cache breakdown - low-hill/Knowledge GitHub Wiki

cache penetration

Cache penetration ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š”๊ฒƒ์„ ๋œปํ•œ๋‹ค. storage layer์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” cache์— ์ €์žฅ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— non-existent ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ๋  ๋•Œ๋งˆ๋‹ค DB์—์„œ ์กฐํšŒํ•˜๊ธฐ์— ์บ์‹ฑ์˜ ์˜๋ฏธ๋ฅผ ์žƒ๊ฒŒ ๋œ๋‹ค. traffic์ด ๋งŽ์œผ๋ฉด DB์— ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋กœ ์•…์˜์ ์ธ ๊ณต๊ฒฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Solution

  • cache empty data

    ์ฟผ๋ฆฌ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋นˆ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ 5๋ถ„ ์ดํ•˜๋กœ ์งง๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

  • Bloom filter

    Bloom filter๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์š”์ฒญ์ด ๋ฐฑ์—”๋“œ๋กœ ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

redisson๋กœ Bloom filter ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค. redission bloom filter ์†Œ์Šค์ฝ”๋“œ ์ฐธ๊ณ 

        RBloomFilter<String> bloomFilter = redisson.getBloomFilter("bloomFilter");
        bloomFilter.tryInit(100_000_000, 0.03);
        
        bloomFilter.add("a");
        bloomFilter.add("b");
        bloomFilter.add("c");
        
        bloomFilter.getExpectedInsertions();
        bloomFilter.getFalseProbability();
        bloomFilter.getHashIterations();
        
        bloomFilter.contains("a");

cache avalanche

Redis ๋‹ค์šด ํ˜น์€ ๋Œ€๋Ÿ‰์˜ cache key๊ฐ€ ๋™์‹œ์— ๋งŒ๋ฃŒ๋˜์–ด ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด DB์—์„œ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB์— ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค์šด์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์บ์‹ฑ ์‹œ ๋งŒ๋ฃŒ ์ผ์ •ํ•œ ๋ฒ”์œ„์˜ random๊ฐ’(1-5๋ถ„)์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์˜ˆ) TTL -> 30+1~5

cache breakdown

hot key problem์œผ๋กœ๋„ ์•Œ๋ ค์ง„ cache breakdown์€ key์— ๋™์‹œ๋‹ค๋ฐœ์ ์ธ request ๋ฐœ์ƒ์œผ๋กœ redis๊ฐ€ ๋‹ค์šด๋˜๊ณ  ์ˆ˜๋งŽ์€ ์š”์ฒญ์€ ๋””๋น„์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

  • Mutex

    ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ๋‹ค์‹œ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

  • hotspot data never expires

    ํ‚ค์— ํ•ด๋‹น๋˜๋Š” value์— ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์ €์žฅํ•˜์—ฌ ๋งŒ๋ฃŒ์‹œ๊ฐ„์— ๋„๋‹ฌํ•˜์˜€์„ ๋•Œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋น„๋™๊ธฐ๋กœ ์บ์‹ฑ๋œ๋‹ค.

Reference

https://devpress.csdn.net/redis/62f658c17e6682346618b138.html https://www.alibabacloud.com/knowledge/developer1/detailed-explanation-caching-problems

โš ๏ธ **GitHub.com Fallback** โš ๏ธ