μ΄λ²μλ cache μ λν΄μ μμλ³Ό κ²μ΄λ€.
cache λΌκ³ νλ€λ©΄ computer science
μμ μ λ§ λ€μν λΆμΌμμ μ¬μ©λκ³ , λμΌν κΈ°λ₯μ μννμ§λ§ λ¬Έλ§₯μ λ°λΌμ λ€λ₯Έ μ΄ν΄λκ° νμνλ€.
λλ cache μ λν΄μ web application layer
μ λ¬Έλ§₯μμ μ€λͺ
μ ν κ²μ΄κ³ , software cache
μ λν μ€λͺ
μ μ£Όλ‘ ν κ²μ΄λ€.
hardware cache μ λ low level μ cache λ₯Ό μνλ€λ©΄ μ΄ κΈμ μ ν©νμ§ μμ μ μλ€.
TL;DR
μ΄λ² κΈμ ν΅μ¬μ μμ½νλ©΄ λ€μκ³Ό κ°λ€
- 1. μΊμλ 무μμΈκ°
- cache: λ°μ΄ν°λ₯Ό μ μ₯νμ¬ λ―Έλμ ν΄λΉ λ°μ΄ν°μ λν μμ²μ λ λΉ λ₯΄κ² μ²λ¦¬ν μ μλλ‘ νλ hardware νΉμ software
- cache μ μ’
λ₯
- h/w cache
- s/w cache
- μ cache κ° ν¨κ³Όμ μΌκΉ?
- software μμ νλ‘μΈμμ νΉμ±μΈ μ°Έμ‘° μ§μμ±μ ꡬνν κ²μ΄ λ°λ‘ μΊμμ
- μ°Έμ‘° μ§μμ±: νλ‘μΈμκ° μ§§μ μκ° λμ λμΌν λ©λͺ¨λ¦¬ μμΉμ νΉμ ν¨ν΄μ κ°μ§κ³ λ°λ³΅μ μΌλ‘ μ‘μΈμ€ νλ κ²½ν₯
- software μμ νλ‘μΈμμ νΉμ±μΈ μ°Έμ‘° μ§μμ±μ ꡬνν κ²μ΄ λ°λ‘ μΊμμ
- cache hit μ miss κ·Έλ¦¬κ³ ratio
- cache hit: cache μ μ‘°ννλ €λ κ°μ΄ μ‘΄μ¬
- cache miss: cache μ μ‘°ννλ €λ κ°μ΄ λΆμ¬
- cache hit ratio: hit λΉμ¨
- cache eviction κ³Ό replacement
- cache eviction
- μλνμ§ μμ λ°©μΆ
- lack of memory μ μν΄ λ°μ
- μλν λ°©μΆμΈ expiration κ³Όλ ꡬλΆλ¨
- cache replacement
- cache miss -> cache eviction -> load data to cache νλ‘μΈμ€
- cache eviction
- cache κ΅μ²΄ μ λ΅
- cache κ΅μ²΄ μ μ±
LRU
: κ°μ₯ μ¬μ©νμ§ μμ, μ€λλ λ°μ΄ν°λ₯Ό κ΅μ²΄νλ μ λ΅MRU
: κ°μ₯ μ΅κ·Όμ μ¬μ©λ νμ΄μ§λ₯Ό κ΅μ²΄νλ μ λ΅- κ·Έ μΈμ μκ³ λ¦¬μ¦
- LFU
- RR
- cache κ΅μ²΄ μ μ±
- κ·ΈλΌ cache λ μΈμ μ°λκ°?
- cache λ λΉμΌ 리μμ€λ―λ‘ λΉμ© ν¨μ¨μ±μ λμ΄λ €λ©΄ backing store μ λΉν΄ μκ² μ μ§λμ΄μΌ ν¨
- μμ£Ό λ°λμ§ μλλ° μμ£Ό μ¬μ©λλ λ°μ΄ν°μΌ κ²½μ° λ§€μ° μ μ©ν¨
1. cache λ 무μμΈκ°?
cache λ λ°μ΄ν°λ₯Ό μ μ₯νμ¬ ν₯ν λ°μ΄ν°μ λν μμ²μ λ λΉ λ₯΄κ² μ²λ¦¬ν μ μλλ‘ νλ h/w νΉμ s/w μ΄λ€.
cache μ 컨μ μ μμ£Ό κ°λ¨νλ€. κ·Έλ¦ΌμΌλ‘ μ΄ν΄ν΄λ³΄μ.
μ΄λ€ μΉ μ ν리μΌμ΄μ
μ΄ μκ³ λ€μκ³Ό κ°μ΄ μμ²μ μ²λ¦¬νμ¬ μ¬μ©μκ° μλ΅μ λ°κΈ°κΉμ§ 2,000ms
κ° μμλλ€κ³ κ°μ νμ λ
μΆνμλ μ΄λ¬ν μμ²μ΄ μ¬ κ²μ μμΈ‘ν΄, μ°μ°μ κ²°κ³Όλ μλ΅μ 미리 μ΄λ€ 곡κ°μ μ μ₯ν΄λλ κ²μ΄λ€.
μ΄λ€ 곡κ°μ μ μ₯λ λ°μ΄ν°λ₯Ό entry λΌκ³ λΆλ₯΄κ³ μ΄ν μμ²λ€μ λν΄μλ entries λ₯Ό μ‘°ννμμ λ μ‘΄μ¬νλ©΄ 미리 μ μ₯λ κ²°κ³Όλ₯Ό λ°λ‘ λ°ννλ€.
λ§μ½ λ°μ΄ν°κ° entries μ μ‘΄μ¬νλ€λ©΄ κ²°κ³Όλ₯Ό λ°λ‘ λ°νν κ²μ΄μ§λ§, κ·Έλ μ§ μλ€λ©΄ κΈ°μ‘΄ μμ²κ³Ό κ°μ΄ μ 체 νλ‘μ°λ₯Ό λμΌνκ² μ§ννλ κ²μ΄λ€
μΊμλ κ±°μ°½νμ§ μλ€.
μΊμλ κΌ μ΄λ ν κΈ°μ (memcache)μ΄λ ν΄ νΉμ μ루μ (redis)μ μ΄μ©ν΄μΌν μΊμλ₯Ό μ΄λ€κ³ ν μ μμκΉ? κ·Έλ μ§ μλ€.
λ¨μν μ½λλ 벨μμ db κ²°κ³Όκ°μ λ³μ(λ©λͺ¨λ¦¬)μ μ μ₯ν΄λ¨λ€κ° μμ²μ΄ μ€λ©΄ db μ 쿼리νμ§ μκ³ μ μ₯λ κ°μ μ¬μ©νλ κ²λ cache λΌκ³ λ³Ό μ μλ€
public class FooService {
// DB connection & interactions
private final FooRepository repository;
// In memory operations
private final Map<UserId, User> myCache;
public User getUser(UserId id) {
if (myCache.contains(id)) {
return myCache.get(id);
}
return repository.findBy(id);
}
}
μ΄μ λ€μ λ³Έλ‘ μΌλ‘ λμμμ, μΊμμ λν μ μλ₯Ό λ§λ¬΄λ¦¬ν΄λ³΄μ
1-1. μΊμλ κ²°κ΅ λ¬΄μμΈκ°?
μΊμλ μ΄μ κ³μ°μ κ²°κ³Όλ λ€λ₯Έ κ³³μ μ μ₯λ λ°μ΄ν°μ 볡μ¬λ³Έμ νΉμ 곡κ°μ μ μ₯νμ¬ μ¬μ¬μ©νλ κ²μ μλ―Ένλ€.
κ²°κ΅ λͺ©μ μ μ°μ°μ λν overhead λ₯Ό μ€μ΄λ κ²μ΄λ€
- μ΄μ κ³μ°μ κ²°κ³Ό: λμΌν 맀κ°λ³μλΌλ©΄ κ²°κ³Όλ λμΌν κ²μ΄λ―λ‘ μ΄μ€ μ°μ°μ λν overhead λ₯Ό μ€μ¬μ€λ€
- λ°μ΄ν°μ 볡μ¬λ³Έ: 물리μ μΌλ‘ λ¨μ΄μ§ λ°μ΄ν°λ₯Ό μ‘°νν λ λ°μνλ overhead λ₯Ό μ€μ¬μ€λ€
1-2. λνμ μΈ μΊμμ μ’ λ₯
μΊμλ 2κ°μ§ μ’ λ₯λ‘ ν¬κ² λλ μ μλ€.
- hardware cache
- software cache
μΊμμ μ’ λ₯ - hardware cache
hardware cache λ operating system κ³Ό computer architecture μμ μμ£Ό μΈκΈλλ CPU cache κ° λνμ μ΄λ€.
H/W λ S/W λͺ¨λ 컨μ μ λμΌνλ€.
H/W cache μ€μ CPU cache λ μ£ΌκΈ°μ΅μ₯μΉμΈ RAM κ³Ό 보쑰기μ΅μ₯μΉ μ¬μ΄μ μλλ₯Ό ν₯μμν€κΈ° μν λͺ©μ μΌλ‘ μ¬μ©λλ€
μΊμμ μ’ λ₯ - software cache
software cache λ application layer μμ λμνλ cache λ₯Ό μκ°νλ©΄ λλ€
μ λͺ ν μ루μ μΈ Redis λ₯Ό μ¬μ©νμ¬ DB λ°μ΄ν°λ μ°μ° κ²°κ³Όλ₯Ό μ μ₯νλ global cache λ software cache μ΄λ©°
MySQL μμ μ¬μ©λλ InnoDB buffer λ 볡μ‘ν λ°μ΄ν° μ‘°ν©μ 미리 λ§λ€μ΄ μ μ₯νλ materialized view λ cache μ μνλ€.
1-3. μ cache κ° ν¨κ³Όμ μΌκΉ?
μ cache κ° ν¨κ³Όμ μΌκΉ? μ΄μ―€ λλ©΄ μμ μ€λͺ μΌλ‘ cache κ° λ λΉ λ₯Έ μλλ‘ μμ²μ μ²λ¦¬νλ κ²μ λΉμ°ν΄ λ³΄μΌ κ²μ΄λ€.
cache κ° ν¨κ³Όμ μΈ μ΄μ λ computer science μμ νμ°μ μΌλ‘ λ°μνλ μ°Έμ‘° μ§μμ±, Locality of Reference λλ¬Έμ΄λ€.
μ΄μ λ Locality of Reference, μ°Έμ‘° μ§μμ± λλ¬Έμ΄λ€!
μ°Έμ‘° μ§μμ±, Locality of Reference μ νλ‘μΈμκ° μ§§μ μκ° λμ λμΌν λ©λͺ¨λ¦¬ μμΉμ νΉμ ν¨ν΄μ κ°μ§κ³ λ°λ³΅μ μΌλ‘ μ‘μΈμ€ νλ κ²½ν₯μ μλ―Ένλ€.
κ²°κ΅ λ°λ³΅μ μΌλ‘ μ‘μΈμ€νλ κ²½ν₯λ§ μ μ΄μ©νλ€λ©΄ μ΅μ νλ₯Ό μ΄λ€λΌ μ μκ³ κ·Έκ²μ΄ λ°λ‘ cache μΈ κ²μ΄λ€
2. cache hit μ miss κ·Έλ¦¬κ³ ratio
cache λ₯Ό μ¬μ©νλ client λ μν©μ λ°λΌ λ€μνλ€.
λ€νΈμν¬ μΊμλ₯Ό μ¬μ©νλ λΈλΌμ°μ κ° λ μλ, cache memory λ₯Ό μ¬μ©νλ CPU κ° λ μλ, redis μ κ°μ global cache storage λ₯Ό μ¬μ©νλ web application μ΄ λ μλ μλ€.
μ΄λ¬ν cache client λ backing store μ μ‘΄μ¬νλ€κ³ μκ°λλ λ°μ΄ν°μ μ κ·Όν λ cache λ₯Ό μ‘°ννμ¬ 2κ°μ§ κ²°λ‘ μ λΈλ€.
- cache hit, cache μ client κ° μνλ λ°μ΄ν°κ° μ‘΄μ¬ν΄
- cache miss, cache μ client κ° μνλ λ°μ΄ν°κ° μ‘΄μ¬νμ§ μμ
λͺ¨λ cache client λ cache μ λν΄ hit νκ±°λ, miss νκ² λλ€
2-1. cache hit
client κ° μνλ λ°μ΄ν°κ° cache memory μ μ‘΄μ¬ν κ²½μ° cache hit λΌκ³ νλ€
'cache client λ cache hit μ ν΄λΉ λ°μ΄ν°λ₯Ό κ·Έλλ‘ λ°ννκΈ° λλ¬Έμ λ³λμ μΆκ° μμ μ΄ νμνμ§ μλ€
κ·Έλμ cache hit κ° λ§μ μλ‘ μ λ°μ μΌλ‘ μμ€ν μ μ±λ₯μ΄ ν₯μλλ€
2-2. cache miss
νμ§λ§ client κ° μνλ λ°μ΄ν°κ° cache μ μ‘΄μ¬νμ§ μλ κ²½μ°λΌλ©΄ μ΄μΌκΈ°λ λ¬λΌμ§λ€.
μ΄λ₯Ό cache miss λΌκ³ νλ€
λ§μ½ cache miss κ° λ°μνλ€λ©΄ cache client λ backing store μ λ€μ μμ²μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ‘°ννλ κ³Όμ μ overhead κ° μΆκ°μ μΌλ‘ λ°μνκ³ μ±λ₯ νλ½μΌλ‘ μ΄μ΄μ§κ² λλ€.
2-3. cache ratio
cache ratio λ 2κ°μ§κ° μ‘΄μ¬νλ€.
- cache hit ratio
- cache miss ratio
cache hit ratio
μ cache miss ratio
λ κ°κ° hit λ miss λ μ λν λΉμ¨μ΄λ€
μ 체 μμ²(access)μ λλΉν΄μ μΌλ§λ hit or miss μΈμ§ λνλ΄λ λΉμ¨μΈλ°, λΉμ°ν hit ratio κ° λμμ ΈμΌ cache μ λν μ±λ₯ μ΅μ νμ μ€κ³κ° μ λμλ€κ³ νλ€
κ·ΈλΌ cache miss κ° λ°μνλ€λ©΄ μ΄λ€ μν©μ΄ λ²μ΄μ§κ² λ κΉ?
cache miss κ° λ°μνλ©΄ cache client λ 2κ°μ§λ₯Ό κ³ λ―Όν΄μΌνλ€
- μΆνλ₯Ό λλΉν΄ μ΄ λ°μ΄ν°λ₯Ό cache μ μ μ¬ν΄ λμκΉ?
- λ§μ½ μ μ¬λ₯Ό νλ €λλ° cache κ° κ½ μ°Όλ€λ©΄ μ΄λ€ λ°μ΄ν°λ₯Ό μμ ν΄μΌνμ§?
μ΄ κ³ λ―Όμ λ μμΈν μμ보μ
3. μΊμ λ°©μΆκ³Ό κ΅μ²΄
μμ κ³ λ―Όμ cache λ₯Ό μ¬μ©ν λ ν λ²μ―€ ν΄λ΄μΌ νλ κ³ λ―Όμ΄λ€.
μ΄ κ³ λ―Ό μμλ μ¬μ€ 2κ°μ§μ ν° κ°λ
μ΄ μ¨μ΄μλλ°, κ·Έκ²μ΄ λ°λ‘ eviction
κ³Ό replacement
μ΄λ€
3-1. μΊμ λ°©μΆ, cache eviction
cache λ νΉμ ν ννμ μ μ₯μμ΄λ€. μ¦, μ νλ ν¬κΈ°λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ μΈμ κ°λ λ°μ΄ν°κ° κ½ μ°¨κ² λλ€.
λ§μ½ μλ‘μ΄ λ°μ΄ν°λ₯Ό cache μ μ μ¬νλ € νλλ° cache κ° κ½ μ°¨μλ€κ³ κ°μ ν΄λ³΄μ
κ·ΈλΌ λΉμ°ν cache μ μλ‘μ΄ λ°μ΄ν°λ₯Ό μμ©ν μ μλ 곡κ°μ λ§λ€μ΄μΌ ν κ²μ΄λ€.
μ΄ λ cache μ μλ‘μ΄ λ°μ΄ν°λ₯Ό μΆκ°νκΈ° μν΄μλ cache μ μ‘΄μ¬νλ νΉμ λ°μ΄ν°λ₯Ό μμ λΌλ κ³Όμ μ κ±°μ³μΌ νκ³ μ΄ κ²μ΄ λ°λ‘ cache eviction, μΊμ λ°©μΆμ΄λΌκ³ νλ€
cache λ₯Ό μ¬μ©νλ€ λ³΄λ©΄ eviction κ³Ό expiration μ΄λΌλ μ©μ΄λ₯Ό λ§λ μ μλ€. μ΄ λμ λͺ νν ꡬλΆλμ΄μΌ νλλ°, eviction μ λͺ μμ μΌλ‘ μλνμ§ μμ λ°©μΆμ νμλΌλ©΄ expiration μ λͺ μμ μΌλ‘ μλν λ°©μΆμ νμ°μ΄λ€.
Eviction μ lack of memory
μ μν΄μ λ°μνλ passive ν μ°μ°μ΄λ€
κ·Έλμ νμ cache μ put μ°μ° μ΄μ μ μλ£λμ΄μΌ νλ€
3-2. μΊμ κ΅μ²΄, cache replacement
μΊμ κ΅μ²΄λ μμ cache miss -> cache eviction -> load data to cache μ μ 체 νλ‘μΈμ€λ₯Ό μλ―Ένλ€
κ²°κ΅ cache miss κ° λ°μνμ¬ cache eviction μ ν΅ν΄ 곡κ°μ λ§λ€κ³ μλ‘μ΄ λ°μ΄ν°λ₯Ό cache μ μ μ¬νλ νμλ€μ ν΅νμ΄μ κ΅μ²΄ λΌκ³ νλ κ²μ΄λ€
μ΄ μΊμ κ΅μ²΄λ cache μ μ±λ₯κ³Ό ν¨μ¨μ±μ μμ΄μ μμ£Ό μ€μν λΆλΆμ μ°¨μ§νλ€.
cache replacement λ μΊμμ μ±λ₯κ³Ό μ§κ²°λλ€
λ§μ½ μΊμκ° κ½ μ°¨μμ΄μ μμλ‘ μ΄λ€ λ°μ΄ν°λ₯Ό evict νμλ€.
νμ§λ§ ν΄λΉ λ°μ΄ν°λ eviction λμ§ μΌλ§ μ μμ΄ λ€μ κ΅μ²΄λμ΄ cache μ μ μ₯λμλ€.
νμ§λ§ λ μΊμκ° κ½ μ°¨μ ν΄λΉ λ°μ΄ν°λ₯Ό evict νλ€λ©΄ κ³μν΄μ cache miss κ° λ°μνκ² λ κ²μΈλ° κ·ΈλΌ cache miss ratio κ° μ¬λΌκ° κ²°κ΅ cache μ μ±λ₯μ΄ λ§€μ° λ¨μ΄μ§κ² λ κ²μ΄λ€
κ·Έλμ cache miss μ cache μ λ°μ΄ν°λ₯Ό λ°©μΆνλ λ°©λ²μ λν΄ λ§μ κ³ λ―Όμ΄ νμνλ€
4. cache κ΅μ²΄ μ λ΅
cache λ₯Ό κ΅μ²΄ν λμλ μ λ΅μ΄ νμνλ€
μμ μμμ²λΌ cache λ₯Ό κ΅μ²΄ν΄μΌ νλλ° μμμ΄ λ°μ΄ν°λ₯Ό μ νν΄μ κ΅μ²΄νλ€κ³ κ°μ ν΄λ³΄μ.
κ·Έλ λ€λ©΄ μ΅μ μ μν©μμ κ°μ₯ λ§μ΄ μ¬μ©νλ cache λ₯Ό λ°©μΆνκ² λμ΄ cache miss ratio κ° λμμ Έ cache λ₯Ό μ¬μ©νλλ° ν° ν¨κ³Όλ₯Ό μ»μ§ λͺ»νκ² λ μ μλ€.
κ·Έλμ cache κ΅μ²΄ μ λ΅μ μ μΈμ΄λ€λ©΄ cache hit ratio λ₯Ό λκ² μ μ§ν μ μλλ°, cache κ΅μ²΄ μ λ΅μ Operation System μμ μ΄μΌκΈ°νλ Page Fault μ λν handling κ³Ό μ μ¬νκ² μ²λ¦¬λλ€.
λ€μν replacement algorith μ΄ μ‘΄μ¬νλλ°, κ°μ₯ λνμ μΈ LRU μκ³ λ¦¬μ¦μ λν΄μ μμ보μ
μμ¦ μ¬μ©νλ cache λ LRU cache κ° κ°μ₯ λνμ μ΄λ€
4-1. cache κ΅μ²΄ μ λ΅, LRU (Least Recently Used)
LRU μκ³ λ¦¬μ¦μ κ°μ₯ μ¬μ©νμ§ μμ, μ€λλ λ°μ΄ν°λ₯Ό κ΅μ²΄νλ μ λ΅μ΄λ€
μ΄ λ Όλ¦¬λ μμ μ΄μΌκΈ°ν μ°Έμ‘° μ§μμ±μ νΉμ± μ¦, μ΅κ·Όμ μ¬μ©νμ§ μμ λ°μ΄ν°λ λ―Έλμλ μ¬μ©νμ§ μμ κ²μ΄λΌλ idea μμ μμλμλ€.
LRU μκ³ λ¦¬μ¦μ ν΅μ¬μ λ°λ‘ accessOrder
μ΄λ€.
μ¦, νΉμ λ°μ΄ν°μ μΌλ§λ μ‘μΈμ€ νλλ₯Ό ν΅ν΄μ λ°μ΄ν°κ° eviction λ μ§ λ§μ§κ° κ²°μ λκΈ° λλ¬Έμ LRU μκ³ λ¦¬μ¦μ μ¬μ©ν λμλ access μ λν tracking μ΄ νμνλ€
Java μμλ HashMap
κ³Ό LinkedHashSet
μ ν΅ν΄μ μ½κ² ꡬνμ΄ κ°λ₯νλ€
public class MyCache {
public static final int STORAGE_CAPACITY = 10;
// μ΄κΈ° μ©λμ΄ 10 μΈ map μμ±
HashMap<String, String> storage = new HashMap<>(STORAGE_CAPACITY);
LinkedHashSet<String> accessOrder = new LinkedHashSet<>();
/**
* μΊμ μ‘°ν
*/
public String get(String key) {
if (!storage.containsKey(key)) {
return "CACHE MISS";
}
markUsed(key); // access tracking
return storage.get(key);
}
/**
* μ¬μ© νλ€λ λ§νΉ
*/
private void markUsed(String key) {
accessOrder.remove(key);
accessOrder.add(key);
}
/**
* μΊμ κ΅μ²΄ νΉμ μ μ¬
*/
public void put(String key, String value) {
if (storage.containsKey(key)) {
throw new IllegalArgumentException("μ΄λ―Έ cache μ μ‘΄μ¬νλ key μ
λλ€");
}
evictLRU(); // λ°©μΆ
storage.put(key, value);
}
/**
* κ°μ₯ μ€λ μ¬μ©λμ§ μμ λ°μ΄ν°λ₯Ό μμ
*/
private void evictLRU() {
if (storage.size() != STORAGE_CAPACITY) { // λ§μ½ μΊμκ° κ½ μ°¨μ§ μμλ€λ©΄
return;
}
String lruKey = accessOrder.iterator().next();
storage.remove(lruKey);
}
}
LinkedHashSet
μ μ½μ
λ element μ μμλ₯Ό μκ³ μλ€.
κ·Έλμ storage μ put μ ν λλ§λ€ μμ -> μ½μ
κ³Όμ μ κ±°μ³ access μ λν order λ₯Ό tracking ν μ μκ² νλ κ²μ΄ ν΅μ¬μ΄λ€
4-2. μ΄μΈμ μ΄λ€ Cache Replacement μ λ΅μ΄ μμκΉ?
μ΄μΈμλ λ€μν Cache Replacement μ λ΅μ΄ μ‘΄μ¬νλ€.
νμ§λ§ κ°μ₯ λ§μ΄ μ¬μ©νλ μκ³ λ¦¬μ¦μ LRU μ LFU μ΄λ―λ‘ μ΄ λκ°μ§λ§ μκ³ μμ΄λ μΆ©λΆνλ©° λ€λ₯Έ μκ³ λ¦¬μ¦λ€μ΄ ν¬κ² μ΄λ ΅μ§ μλ€
- LFU (Least Frequently Used)
- LRU μ λμΌνκ² μ°Έμ‘° μ§μμ±μ μ΄μ©νμμΌλ accessOrder κ° μλλΌ μ¬μ© λΉλλ₯Ό tracking νλ€
- access μ λν counter λ₯Ό ꡬννμ¬ λΉλλ₯Ό tracking νλ λ°©μμΌλ‘ ꡬνλλ€
- MRU (Most Recently Used)
- LRU μ λ°λλ‘ κ°μ₯ μ΅κ·Όμ μ¬μ©λ νμ΄μ§λ₯Ό κ΅μ²΄νλ μ λ΅μ΄λ€
- μ΄ μ»¨μ μ ν λ² μ¬μ©λλ©΄ κ°κΉμ΄ λ―Έλμ μ¬μ©λμ§ μλ ν¨ν΄μ μ΄μ©νλ€
- κ·Έλμ ν¨ν΄μ΄ μ‘΄μ¬νλ νΉμ μν μ£ΌκΈ°μ λ°μ΄ν°λ₯Ό μ μΈνκ³ μλ μμ£Ό μ¬μ©νμ§ μλλ€
- LRU μ λ°λλ‘ κ°μ₯ μ΅κ·Όμ μ¬μ©λ νμ΄μ§λ₯Ό κ΅μ²΄νλ μ λ΅μ΄λ€
- RR (Random Replacement)
- λ§ κ·Έλλ‘ λλ€νκ² κ΅μ²΄λ₯Ό νλ μκ³ λ¦¬μ¦μ΄λ€.
- ꡬννκΈ° κ°μ₯ κ°λ¨νμ§λ§ cache μ±λ₯μ΄ λ§€μ° λ¨μ΄μ§ μ μκΈ° λλ¬Έμ μ¬μ©νμ§ μλλ€
μ¬λ΄μΌλ‘ Global Cache μ λνκ²©μΈ Redis λ 4.0 λ²μ μ΄νλΆν° LRU λΏλ§ μλλΌ LFU μκ³ λ¦¬μ¦μ μ§μνκΈ° μμνλ€.
νμ§λ§ κΈ°λ³Έμ μΌλ‘λ λ€μ μκ°μ μμλ³Ό λ΄μ©μ΄μ§λ§, TTL(Time To Live) μ μ΄μ©ν LRU λ₯Ό ν΅ν΄ κ΄λ¦¬λλ€
5. cache λ μΈμ μ¬μ©νλ κ²μ΄ ν¨κ³Όμ μΌκΉ?
cache λ λΉμΈλ€.
os μ± μμ λ΄€μ memory hierarchy μ λΉμ© κ·Έλ¦Όμ λ무λλ μ λͺ νλ€
λΉ λ₯Ό μλ‘, cpu μ κ°κΉκ³ λΉμΈμ§λ€
cache memory λ λΉμΈλ€. κ·Έλμ λΉμ© ν¨μ¨μ±μ λ°μ§λ€λ©΄ backing store λ³΄λ€ cache λ ν¨μ¬ μκ² μ μ§νλ νΈμ΄ μΌλ°μ μ΄κ³ ν¨μ¨μ μ΄λ€.
μ°λ¦¬κ° μ μ¬ μ μμ μΊμλ₯Ό μ λ°°μΉνμλ€λ©΄ μΊμμ ν¬κΈ°κ° μλλΌλ κ°λ ₯ν μ΅μ ν λκ΅¬κ° λ μ μλ€.
κ·Έλμ μΈμ μ¨μΌνμ§?
κ²°λ‘ λ§ μ΄μΌκΈ°νμλ©΄ μΊμλ μμ£Ό μ¬μ©λλ©° μ λ°λμ§ μλ λ°μ΄ν°μΌ κ²½μ°μ μ ν©νλ€
μ°λ¦¬λ cache replacement μ λν΄μ μ΄μ μκ³ μλ€.
μ무리 μ’μ κ΅μ²΄ μκ³ λ¦¬μ¦μ μ μ©νλλΌλ κ²°κ΅ κ΅μ²΄κ° μ μ΄μ λμ§ μλ μν©μ λ§λλ κ²μ΄ μ’λ€.
cache hit ratio κ° λμ μλ‘ eviction
& replacement
μ λ€μ΄κ°λ μ€λ²ν€λλ₯Ό μ€μΌ μ μκΈ° λλ¬Έμ΄λ€.
μμ£Ό λ°λλ λ°μ΄ν°μ λν΄μλ cache λ₯Ό μ μ©νλ κ² λν μ’μ μ νμ μλλ€
λ§μΉλ©°
μ΄μ cache μ λν κΈ°μ΄λ₯Ό λΌμλ€κ³ λ³Ό μ μλ€.
μμΌλ‘ cache μ λν΄μ μμμΌ ν κ²λ€κ³Ό λμ΄μΌ ν μ°μ΄ λ§€μ° λμλ°, μ΄λ² μκ°μ ν΅ν΄μ κΈ°λ³Έμ μΈ κ·Έ κΈ°λ³ΈκΈ°λ₯Ό λ€μ‘λ€κ³ μκ°νλ©΄ λ κ² κ°λ€
μμΌλ‘ μΊμμ κ΄λ ¨λ κΈμ κ³μν΄μ μ¬λ¦΄ μμ μ΄λ λ€λ₯Έ κΈλ μ°Έκ³ νκΈΈ λ°λλ€
λκΈ