KOTLIN · 성능
캐싱 전략 (Caching)
다양한 캐싱 전략을 구현합니다. TTL, LRU, Write-through 캐시로 성능과 일관성을 확보합니다.
성능중급cachinglruttlperformance
핵심 설명
다양한 캐싱 전략을 구현합니다. TTL, LRU, Write-through 캐시로 성능과 일관성을 확보합니다.
Kotlin code
class LRUCache<K, V>(private val maxSize: Int) {
private val cache = LinkedHashMap<K, V>(maxSize, 0.75f, true)
fun get(key: K): V? = cache[key]
fun put(key: K, value: V) {
cache[key] = value
if (cache.size > maxSize) {
val eldest = cache.keys.first()
cache.remove(eldest)
}
}
val size get() = cache.size
fun stats() = "크기: $size/$maxSize"
}
class TTLCache<K, V>(private val ttlMs: Long) {
private data class Entry<V>(val value: V, val expiry: Long)
private val cache = mutableMapOf<K, Entry<V>>()
fun get(key: K): V? {
val entry = cache[key] ?: return null
if (System.currentTimeMillis() > entry.expiry) {
cache.remove(key)
return null
}
return entry.value
}
fun put(key: K, value: V) {
cache[key] = Entry(value, System.currentTimeMillis() + ttlMs)
}
}
fun main() {
// LRU 캐시
val lru = LRUCache<String, Int>(3)
lru.put("a", 1); lru.put("b", 2); lru.put("c", 3)
lru.get("a") // a를 최근 사용으로 이동
lru.put("d", 4) // b가 제거됨 (가장 오래 미사용)
println("LRU a: ${lru.get("a")}") // 1
println("LRU b: ${lru.get("b")}") // null (제거됨)
println(lru.stats())
// TTL 캐시
val ttl = TTLCache<String, String>(500) // 500ms TTL
ttl.put("token", "abc123")
println("즉시: ${ttl.get("token")}") // abc123
Thread.sleep(600)
println("만료 후: ${ttl.get("token")}") // null
}학습 팁
읽기가 빈번하고 데이터 변경이 적은 경우 LRU 캐시가 적합합니다. 실시간성이 중요하면 TTL을 짧게 설정하세요.
주의할 점
캐시 무효화는 어려운 문제입니다. 데이터 변경 시 캐시를 즉시 갱신하는 write-through 전략이나 이벤트 기반 무효화를 고려하세요.
자주 묻는 질문
캐싱 전략 (Caching)란 무엇인가요?
다양한 캐싱 전략을 구현합니다. TTL, LRU, Write-through 캐시로 성능과 일관성을 확보합니다.
캐싱 전략 (Caching) 학습 시 주의할 점은 무엇인가요?
캐시 무효화는 어려운 문제입니다. 데이터 변경 시 캐시를 즉시 갱신하는 write-through 전략이나 이벤트 기반 무효화를 고려하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.