λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/Database

[Database] Redis Vs Memcached

by vodkassi 2021. 8. 10.
728x90

Memcached vs Redis

 

✨ Caching Solution

 

캐싱은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯ ν–₯상에 κ°€μž₯ 많이 κΈ°μ—¬ν•˜λŠ” 단계이닀. μΊμ‹œ μ„œλ²„ λ˜λŠ” in-memory cache λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ λ§Žμ΄λ“€ μ•Œμ•„λ³΄λŠ” 것이 Redis 와 Memcache 인데, 이 두 가지λ₯Ό 비ꡐ해 보며 κ΅¬ν˜„ν•˜κ³ μž ν•˜λŠ” μ„œλΉ„μŠ€μ— 더 μ ν•©ν•œ μΊμ‹œ μ†”λ£¨μ…˜μΈμ§€ μ•Œμ•„λ³΄μž. 

 

Memcached λŠ” 2003 년에 λ‚˜μ˜¨ κ³ μ„±λŠ₯ 캐싱 μ†”λ£¨μ…˜μ΄λ‹€. Redis λŠ” 비ꡐ적 μ΅œκ·Όμ— λ‚˜μ™”μœΌλ©° (2009λ…„), μ—¬λŸ¬ κΈ°λŠ₯을 νƒ‘μž¬ν•œ 캐싱 μ†”λ£¨μ…˜μ΄λ‹€. AWS μ—μ„œλŠ” μ΄λ“€μ˜ 곡톡점과 차이점을 λ‹€μŒκ³Ό 같이 μ •λ¦¬ν•˜κ³  μžˆλ‹€. 

 

ν‘œλ‘œ λ³΄λ‹ˆ λ­”κ°€ Memcached κ°€ Redis 에 λΉ„ν•΄ ν•  쀄 μ•„λŠ” 것이 μ μ–΄λ³΄μ΄λŠ”λ°, μ‹€μ œλ‘œλ„ κ·Έλ ‡λ‹€. Memcached λŠ” λ‹¨μˆœν•œ μž‘μ—…μ„ μœ„ν•΄ κ³ μ•ˆλœ 반면 Redis λŠ” μ—¬λŸ¬ μΌ€μ΄μŠ€κΉŒμ§€ κ³ λ €ν•  수 μžˆλ„λ‘ 좔가적인 κΈ°λŠ₯이 νƒ‘μž¬λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ 이 λ‘˜μ˜ 기본적인 κΈ°λŠ₯은 κ°™λ‹€λŠ” 점을 μœ μ˜ν•˜μ—¬μ•Ό ν•œλ‹€. 

 

 

✨  Memcached & Redis : 곡톡점

 

Memcached 와 Redis λŠ” λͺ¨λ‘ in-memory storage (database) 둜, SSD 와 같은 Disk 보닀 데이터 λ°˜ν™˜ 속도가 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆλ‹€. λ‹€μ‹œ λ§ν•˜λ©΄ μ„œλ²„μ˜ μ„±λŠ₯을 ν–₯μƒν•˜λŠ” 것이 λͺ©μ μΈ μΊμ‹œμ— μ΅œμ ν™” λ˜μ–΄ μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.  κΈ°λ³Έμ μœΌλ‘œλŠ” NoSQL λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, key-value μŒμ„ ν™œμš©ν•΄ 데이터λ₯Ό μ €μž₯ν•œλ‹€. 

 

 

✨  Memcached & Redis : 차이점

 

κ·Έλ ‡λ‹€λ©΄ μΊμ‹œ 선택에 μ•žμ„œ κ³ λ €ν•΄μ•Ό ν•  μ€‘μš”ν•œ 차이점은 무엇이 μžˆμ„κΉŒ.

 

1. 데이터 νƒ€μž…

Memcached λŠ” 데이터λ₯Ό λ¬Έμžμ—΄λ‘œλ§Œ μ €μž₯ν•˜λŠ” 반면, Redis λŠ” 쑰금 더 λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ μ§€μ›ν•œλ‹€. λ”°λΌμ„œ Memcached λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” JSON.stringify λ“±μ˜ λ©”μ„œλ“œλ₯Ό 톡해 데이터λ₯Ό μ „λΆ€ λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•˜κ³ , κ°€μ Έμ˜¬ λ•Œλ„ νŒŒμ‹±μ„ ν•΄μ•Ό ν•˜λŠ” 반면 Redis λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ°”λ‘œ μ›ν•˜λŠ” 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‹€. 

 

2. 데이터 지속성

Memcached μ—λŠ” μ—†μ§€λ§Œ Redis μ—λŠ” νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” 데이터 지속성 (Persistence) 이닀. in-memory storage λŠ” μ›λž˜ 단기간 μ €μž₯μ†Œμ΄κΈ° λ•Œλ¬Έμ— 컴퓨터가 κΊΌμ§€κ±°λ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ μž„μ‹œ μ €μž₯λ˜μ—ˆλ˜ 데이터가 μ „λΆ€ μ‚­μ œλœλ‹€. Memcached λŠ” μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— 데이터λ₯Ό λ‚ λ¦¬κ²Œ 될 μœ„ν—˜μ„±μ΄ λ†’λ‹€. 

 

반면 Redis μ—λŠ” AOF Log 와 RDB Snapshot μ΄λΌλŠ” κΈ°λŠ₯이 μžˆλ‹€. μ΄λŠ” 각각 Append Only File κ³Ό Redis Database Backup File 의 μ•½μ–΄λ‘œ, in-memory 에 μ €μž₯된 데이터λ₯Ό Disk에 λ°±μ—…ν•΄μ£ΌλŠ” κΈ°λŠ₯이닀. μ΄λŸ¬ν•œ κΈ°λŠ₯듀을 톡해 Redis λŠ” μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•΄λ„ 데이터 μœ μ‹€ 없이 λ³΄κ΄€λ˜μ—ˆλ˜ 데이터λ₯Ό 볡ꡬ할 수 있으며, μ„œλ²„ μ•ˆμ •μ„±μ—λ„ 크게 κΈ°μ—¬ν•œλ‹€.

 

더보기

AOF Log 

- μ„œλ²„μ—μ„œ λ‚¨κΈ°λŠ” λͺ¨λ“  ꡬ문 (operation) 을 둜그둜 μ°μ–΄μ„œ λ³΄κ΄€ν•œ λ’€, μž¬λΆ€νŒ… λ˜λŠ” 데이터 μœ μ‹€ μ‹œ 둜그λ₯Ό μ „λΆ€ λ‹€μ‹œ μ‹€ν–‰ν•˜λŠ” 방식이닀.  

 

RDB Snapshot

- Redis 의 ν˜„μž¬ μƒνƒœμ— λŒ€ν•œ μŠ€λƒ…μƒ·μ„ 찍고 child ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 λ””μŠ€ν¬μ— μ €μž₯ν•˜λŠ” 방식이닀. parent ν”„λ‘œμ„ΈμŠ€λŠ” λ°©ν•΄λ₯Ό 받지 μ•ŠκΈ° λ•Œλ¬Έμ— Redis λŠ” λ³Έμ—°μ˜ 캐싱을 계속 μˆ˜ν–‰ν•  수 있게 λœλ‹€.  

 

3. 데이터 길이 

Redis 의 key λ˜λŠ” string 은 512MB 에 λ‹¬ν•˜λŠ” 크기λ₯Ό κ°€μ§ˆ 수 μžˆλŠ” 반면 Memcached 의 key λŠ” 250 λ°”μ΄νŠΈμ˜ 크기밖에 갖지 λͺ»ν•œλ‹€. λ”°λΌμ„œ μ €μž₯ν•  데이터 값이 크닀면 Redis λ₯Ό μ΄μš©ν•˜λŠ”λ° 이점이 μžˆλ‹€.

 

4. 데이터 μ‚­μ œ 방법

Memcached λ‚˜ Redis λ‚˜ λͺ¨λ‘ LRU (Least Recently Used) 방법을 톡해 μž”μ—¬ 기간이 κΈ΄ 데이터λ₯Ό μ‚­μ œν•œλ‹€. κ·ΈλŸ¬λ‚˜ Redis λŠ” No Eviction (데이터λ₯Ό μ‚­μ œν•˜μ§€ μ•Šκ³  λ©”λͺ¨λ¦¬κ°€ μ°¨λ©΄ key μΆ”κ°€λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒ) μ΄λ‚˜ TTL (Time to Live : TTL ν‘œκΈ°κ°€ 된 데이터λ₯Ό λ¨Όμ € μ§€μš°κ³  λ‚˜λ¨Έμ§€λŠ” 아직 μœ νš¨ν•œ κ²ƒμœΌλ‘œ 간주함) λ“±μ˜ 좔가적인 방법을 ν†΅ν•΄μ„œλ„ 데이터λ₯Ό 관리할 수 μžˆλ‹€. 

 

5. λ ˆν”Œλ¦¬μΉ΄

Redis λŠ” 자체적으둜 Replica λ₯Ό ν˜•μ„±ν•˜μ—¬ 두 개의 λ‹€λ₯Έ μ„œλ²„μ—μ„œλ„ λ™μΌν•œ 데이터가 보관될 수 μžˆλ„λ‘ ν•˜μ§€λ§Œ, Memcached λŠ” μ™ΈλΆ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 이상 Replica λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. 

 

6. ν΄λŸ¬μŠ€ν„°

ν΄λŸ¬μŠ€ν„°λ§μ΄λž€ μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성해 ν•˜λ‚˜λ‘œ μ—°κ²°ν•˜λŠ” μž‘μ—…μ„ μ˜λ―Έν•˜λŠ”λ°, 이λ₯Ό 톡해 μ„œλΉ„μŠ€μ˜ μ ‘κ·Ό κ°€λŠ₯성을 높일 수 μžˆλ‹€. κ°€λ Ή, μ—¬λŸ¬ 개의 Redis node κ°€ ν•˜λ‚˜μ˜ ν΄λŸ¬μŠ€ν„°λ‘œ μ—°κ²°λœ 경우, μ„œλ²„ 1 μ—μ„œ Redis node 2 에 μžˆλŠ” 정보에 λŒ€ν•œ μš”μ²­μ΄ λ“€μ–΄μ˜¨λ‹€λ©΄ Redis node 1 λŠ” λ°”λ‘œ node 2 에 μ ‘κ·Όν•΄ 정보λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€. 

 

Redis λŠ” ν΄λŸ¬μŠ€ν„°λ§μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ—, 이λ₯Ό 잘 ν™œμš©ν•œλ‹€λ©΄ μ„œλΉ„μŠ€μ˜ μ„±λŠ₯이 κ°œμ„ λ˜λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ ν™•μž₯ κ°€λŠ₯성도 λ†’μ—¬μ£Όκ²Œ λœλ‹€. 

 

+ 7. Multithread 

무언가가 Multithread λž€ 것은 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ—¬λŸ¬ 개의 μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•  수 μžˆμŒμ„ μ˜λ―Έν•˜λŠ”λ°, μ›λž˜ Memcached 와 Redis 쀑 Memcached 만 Multithread λ₯Ό 지원해 더 쒋은 μ„±λŠ₯을 μ œκ³΅ν–ˆμ—ˆλ‹€. 

 

κ·ΈλŸ¬λ‚˜ Redis 버전이 μ—…λ°μ΄νŠΈ 되며 버전 6λΆ€ν„°λŠ” Redis μ—μ„œλ„ Multithreading 이 μ§€μ›λ˜κΈ° μ‹œμž‘ν–ˆλ‹€. 

 

 

✨  Memcached vs Redis : 무엇을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€

 

정닡은 μ—†λ‹€. μ„œλ‘μ— μ–ΈκΈ‰ν–ˆλ“― μ„œλΉ„μŠ€λ₯Ό κ°€μž₯ 잘 μ•Œκ³  μžˆλŠ” 것은 κ·Έ μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•œ μ‚¬λžŒμ΄κΈ° λ•Œλ¬Έμ—, λ³΅μž‘ν•œ 캐싱 κΈ°λŠ₯이 ν•„μš” μ—†λ‹€λ©΄ λ‹¨μˆœν•œ Memcached λ₯Ό μ‚¬μš©ν•˜λ©΄ 될 것이고, Redis 의 이점이 ν•„μš”ν•˜λ‹€λ©΄ Redis λ₯Ό μ“°λ©΄ 될 것이닀.

 

κ·ΈλŸ¬λ‚˜ μ•Œμ•„λ³Όμˆ˜λ‘ λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒμ΄ Memcached 을 μ“°λŠλ‹ˆ μ—¬λŸ¬ 섀정을 ν•  수 μžˆλŠ” Redis λ₯Ό μ„ νƒν•˜λŠ” κ²½ν–₯을 보인닀. 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‚˜λ„ Redis λ₯Ό ν™œμš©ν•΄ 캐싱을 ν•˜κ²Œ λ˜μ—ˆλŠ”λ°, Redis 의 이점을 μ΅œλŒ€ν•œ λˆ„λ €λ³΄κΈΈ κΈ°λŒ€ν•΄λ³Έλ‹€. 

 

 

✨  참고자료

λŒ“κΈ€