Study: DeveloperTools(DevTool)/DevTool: NoSQL(Elastic, Mongo)

[NoSQL] Redis(vs Memcached) ์ •๋ฆฌ: NoSQL Key-value DB

DrawingProcess 2022. 11. 16. 11:41
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ NoSQL ์ค‘ ํ•˜๋‚˜์ธ 'Redis'์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
ํ‰์†Œ์— NoSQL์— ๊ด€์‹ฌ์ด ์žˆ๊ฑฐ๋‚˜ Redis๋ฅผ ์ž…๋ฌธํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์„ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1. Redis ์†Œ๊ฐœ

1.1 Redis ์†Œ๊ฐœ

Redis๋Š” Remote Dictionary Server๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€ํ‘œ์ ์ธ In-Memory data store ์†”๋ฃจ์…˜ ์ค‘ ํ•˜๋‚˜๋กœ ๊ผฝํžˆ๋Š”๋ฐ, ํŠนํžˆ Memcached์™€ ์ข…์ข… ๋น„๊ต๋˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. Redis๋Š” Memcached์™€๋Š” ๋‹ฌ๋ฆฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›ํ•˜์—ฌ ๋ณด๋‹ค ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๋ฉฐ, ๋ถ„์‚ฐ Key-Value Store, ์บ์‹œ์„œ๋ฒ„, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋“ฑ์œผ๋กœ ํ™œ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ, DB-Engines Ranking ๊ธฐ์ค€์œผ๋กœ ํ˜„์กดํ•˜๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ์ธ์ง€๋„ 2์œ„, ์ „์ฒด DB ์ธ์ง€๋„ 6์œ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

1.2 Redis ํŠน์ง•: NoSQL (Key-value + Document, Graph, Spatial, Search engine, Time Series)

Name Redis
Description Popular in-memory data platform used as a cache, message broker, and database that can be deployed on-premises, across clouds, and hybrid environments 
Primary database model Key-value store 
Secondary database models Document store 
Graph DBMS 
Spatial DBMS
Search engine 
Time Series DBMS 
Technical documentation docs.redis.com/­latest/­index.html
redis.io/­documentation
Developer Redis project core team, inspired by Salvatore Sanfilippo 
Initial release 2009
Current release 7.0.5, September 2022
License  Open Source (3-Clause-BSD
Cloud-based only  no
DBaaS offerings (sponsored links) 
  • Aiven for Redis: Fully managed in-memory key-value store, for all your caching and speedy lookup needs.
  • Redis Enterprise Cloud: Instantly scale and pay only for the resources you need - on any cloud - AWS, Azure or Google Cloud.
  • ScaleGrid Hosting for Redis: Fully managed hosting for Redis on a wide variety of cloud providers and On-Premises. Get advanced monitoring and automate your management through one centralized platform.
Data scheme schema-free
Typing  Supported data types(Collection)
- String: ๋ฌธ์ž์—ด, ์ •์ˆ˜, ์†Œ์ˆ˜
- Bitmap: bit ๋‹จ์œ„์˜ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
- Hash: Key-Value ๊ธฐ๋ฐ˜ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ํ•ด์‹œํ…Œ์ด๋ธ”
- List: string์˜ ๋ฆฌ์ŠคํŠธ
- Set: ์ค‘๋ณต์„ ์ œ์™ธํ•œ ๊ฐ’ ์ €์žฅ
- ZSet(sorted sets): String ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ˆ˜๋กœ ํ‘œํ˜„๋˜๋Š” score์™€ ๋งคํ•‘ ํ›„ score ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ’/๋ฒ”์œ„ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
- geospatial indexes: ์‹ค์‹œ๊ฐ„ ์œ„์น˜๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ง€์›ํ•˜์—ฌ ์ง€๋„๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ ์„œ๋น„์Šค ์ œ๊ณต ๊ฐ€๋Šฅ
- hyperloglogs: ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•  ๋•Œ ์‚ฌ์šฉ
- streams: ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๊ฐ€์žฅ ์ ๋‹น
Secondary indexes yes 
SQL  no
APIs and other access methods proprietary protocol (RESP: REdis Sirialization Protocol)
3rd parties Read the Redis NoSQL benchmark report.
» more

CData: Connect to Big Data & NoSQL through standard Drivers.
» more

Aiven for Redis: Store and access your data quickly and efficiently.
» more

data modeling methods with modules such as RediSearchRedisJSONRedisGraphRedisTimeSeriesRedisBloom, and RedisAI, and allows operations to be executed across and between modules and core Redis functionality using RedisGears, a serverless engine that runs across shards and nodes of Redis Enterprise cluster. 
Typical application scenarios Redis Enterprise is used by large enterprise, startup, and government organizations to power use cases such as real-time fraud detection, global user session management, real-time inventory management, feature store for AI/ML, claims processing, and more.  
Common use cases include (but not limited to):
  • Caching (Query, API)
  • High-speed transaction
  • Data ingest
  • Distributed messaging
  • Real-time analytics
  • Rate limiting 
  • De-duplication
  • Message Queing
  • View Counting, User Session Management...

1.3 Redis์™€ Memcached ์ฐจ์ด์ 

In-memory Data Store ๊ด€์ ์—์„œ Memcached์™€ Redis๋ฅผ ๋‘๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ธฐ๋Šฅ์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๊ณ  2์žฅ์—์„œ๋Š” Redis์˜ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Memcached Redis
๋ฐ์ดํ„ฐ ๋ถ„ํ•  (Sharding / Partitioning) O (Consistent Hashing) O
๋ฐ์ดํ„ฐ ๋ณต์ œ (Replication) O (Repcached) O
๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ ์ง€์› X O
Multi Thread / Single Thread Multi Thread Single Thread
๋ฐ์ดํ„ฐ ์ €์žฅ (Persistence / Snapshot) X O
ํŠธ๋žœ์žญ์…˜ ์ง€์› X O
Publisher / Subscriber X O

2. Redis ๊ตฌ์กฐ

2.1 Redis ์ €์žฅ ๊ตฌ์กฐ(collection)

  • String, Hash, Sorted Set, List, Set๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›. ๋ฐ˜๋ฉด Memcached๋Š” ๋ฌธ์ž์—ด๋งŒ ๊ฐ€๋Šฅ.
  • ์ตœ๋Œ€ 512MB์˜ key์™€ 512MB์˜ value๋ฅผ ์ง€์›. ๋ฐ˜๋ฉด Memcached๋Š” ์ตœ๋Œ€ 250B์˜ key์™€ 1MB์˜ value๋งŒ ๊ฐ€๋Šฅ.
  • ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ„ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2.2 Redis  ์•„ํ‚คํ…์ณ ํŠน์ง•

2.2.1 ๋ฐ์ดํ„ฐ ๋ณต์ œ (Replication)

  • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ชจ๋“  ๊ฐ’์ด ๋ณต์ œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ read์˜ HA(๊ณ ๊ฐ€์šฉ์„ฑ)์„ ํ™•๋ณดํ•˜์—ฌ ์ž๋™ ์žฅ์•  ์กฐ์น˜(Failover) ์‹œ์Šคํ…œ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ๋ชฉ์ ์ด ์žˆ์Œ.
  • ๊ทธ๋Ÿฌ๋‚˜, ํ•œ ๊ฐœ์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ๋ณต์‚ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ๊ณผ ๋ชจ๋“  replica๋“ค์ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ ๊ด€์ ์—์„œ๋Š” ํ™•์žฅ์„ฑ์ด ์ข‹์•„์ง„๋‹ค๊ณ  ๋ณด๊ธด ์–ด๋ ค์›€.

2.2.2 ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ (Sharing / Partitioning)

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ”์œ„ ๋˜๋Š” ํ•ด์‰ฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒŒํ‹ฐ์…”๋‹ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์–‘ ์ž์ฒด๋ฅผ ๋‚˜๋ˆ  ๊ฐ–์Œ(key์˜ ๋Œ€์—ญํญ์„ ์ •ํ•ด์„œ ๊ด€๋ฆฌํ•จ).
  • ์“ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋Š˜์–ด๋‚˜๋”๋ผ๋„ ํ™•์žฅ์„ฑ์„ ์ข‹์•„์ง€๋ฉฐ, ์ฑ…์ž„์ ธ์•ผํ•  ๋…ธ๋“œ์˜ ์—ญํ• ์ด ๋ถ„๋ฆฌ๋˜์–ด ์บ์‹œ ํžˆํŠธ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋ถ„์‚ฐํ•˜์—ฌ write์˜ HA(๊ณ ๊ฐ€์šฉ์„ฑ)์„ ํ™•๋ณด๋จ.

2.2.3 Query Off Loading์„ ํ†ตํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ

  • ์ด master/slave replication์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ 'Query Off Loading'์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์ ‘์†์ž์ˆ˜๋‚˜ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Query Off Loading: master node๋Š” write only, slave node๋Š” read only ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, redis ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Oracle, MySQL๊ณผ ๊ฐ™์€ RDBMS์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์•„ํ‚คํ…์ณ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ DB ํŠธ๋ Œ์ ์…˜์€ ์›น์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ write๊ฐ€ 10~20%, read๊ฐ€ 70~90% ์„ ์ด๊ธฐ ๋•Œ๋ฌธ์—, read ํŠธ๋ Œ์ ์…˜์„ ๋ถ„์‚ฐ ์‹œํ‚จ๋‹ค๋ฉด, ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ์†๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ redis์˜ ๊ฒฝ์šฐ value์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์—ฐ์‚ฐ(ํ•ฉ์ง‘ํ•ฉ,๊ต์ง‘ํ•ฉ,Range Query)๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœ PUT/GET๋งŒ ํ•˜๋Š” NoSQL์ด๋‚˜ memcached์— ๋น„ํ•ด์„œ read์— ์‚ฌ์šฉ๋˜๋Š” resource์˜ ์–‘์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋†’๊ธฐ ๋•Œ๋ฌธ์— redis์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

2.2.4 Redis-Cluster 

  • Redis์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ œํ•œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๊ธฐ์ ์œผ๋กœ Scale out์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • scale out : ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.
    • scale up : ๋‹จ์ผ ์„œ๋ฒ„์˜ ์ŠคํŽ™์„ ์˜ฌ๋ ค ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • master๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‘์–ด ๋ถ„์‚ฐ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ(Sharding), scale out ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๋ฅผ ๋Š˜๋ฆด์ˆ˜๋ก ์ €์žฅํ• ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ๋ฌดํ•œ๋Œ€๋กœ ์ปค์ง„๋‹ค. 
  • master์— ํ•˜๋‚˜ ์ด์ƒ์˜ slave ๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
  • master 1,2,3 ์ด ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋Š” 3๊ฐœ์ค‘์— ํ•˜๋‚˜์— ์ €์žฅ๋˜๋ฉฐ, client ๊ฐ€ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ์š”์ฒญ์‹œ ์ €์žฅ๋œ ๊ณณ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋งˆ์Šคํ„ฐ์— ์š”์ฒญ ํ–ˆ๋‹ค๋ฉด ์ €์žฅ๋œ ๋งˆ์Šคํ„ฐ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋งˆ์Šคํ„ฐ ์ •๋ณด์— ๋‹ค์‹œ ์š”์ฒญํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • But, ํ•ด๋‹น ๋ถ€๋ถ„์€ redis-cluster ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‹ค ํ•ด์ค€๋‹ค.

+ ์ฐธ๊ณ : Redis ์•„ํ‚คํ…์ณ์˜ ๋ฐฐ๊ฒฝ ๋ฐ ํšจ์šฉ์„ฑ

3. Redis ์ฃผ์š” ๊ธฐ๋Šฅ

3.1 Scalability

Memcached์˜ ํ™•์žฅ์„ฑ์€ Scale up(vertical)์„ ํ†ตํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, Redis๋Š” Scale out(horizontal)์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 Data Eviction ์ „๋žต

์บ์‹œ๋„ ์œ ํ•œํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€๋‹ˆ๋ฏ€๋กœ, ๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ์— ์ž๋ฆฌ์žก์€ ์ž์›์„ ์–ธ์  ๊ฐ€ ์ซ“์•„๋‚ด์•ผํ•  ์ˆœ๊ฐ„๋“ค์ด ์ฐพ์•„์˜ค๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ ๋ณด๊ด€๋˜๋ฉฐ, ์‹ฌ์ง€์–ด ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ผœ๋„ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Memcached์˜ ๊ฒฝ์šฐ, LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Redis์˜ ๊ฒฝ์šฐ ๋ณด๋‹ค ๋‹ค์–‘ํ•˜๊ณ  ๋ฏธ์„ธํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • No Eviction: ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋˜์ง
  • All Keys LRU: LRU์— ๊ทผ๊ฑฐํ•˜์—ฌ eviction ํ•˜๊ธฐ
  • Volatile LRU: LRU๋ฅผ ๋”ฐ๋ฅด๋˜, ๋งŒ๋ฃŒ ์‹œ์ ์ด ์ง€์ •๋œ ๊ฒƒ๋“ค์— ํ•œํ•ด์„œ eviction ์ˆ˜ํ–‰
  • All Keys Random: ๋žœ๋คํ•˜๊ฒŒ ํ‚ค ์‚ญ์ œ
  • Volatile Random: ๋žœ๋คํ•˜๊ฒŒ ํ‚ค ์‚ญ์ œํ•˜๋˜, ๊ทธ ๋Œ€์ƒ์€ ๋งŒ๋ฃŒ ์‹œ์ ์ด ์ง€์ •๋œ ๊ฒƒ๋“ค๋กœ ํ•œ์ •
  • Volatile TTL: TTL ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋งŒ๋ฃŒ์‹œ์ ์ด ๋นจ๋ฆฌ ๋„๋ž˜ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‚ญ์ œ

3.3 ๋ฐ์ดํ„ฐ ์ €์žฅ (Persistance)

Redis๋Š” RDB ํ˜น์€ AOF ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด, Memcached๋Š” ๋“ค๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Memcached๋Š” ์บ์‹œ๋กœ์„œ์˜ ๊ธฐ๋Šฅ๋ฐ–์— ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , RDB ํ˜น์€ AOF ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Master ๋…ธ๋“œ์—์„œ๋Š” ์„œ๋น„์Šค๋งŒ ํ•˜๊ณ  Slave ์—์„œ ๋ฐฑ์—…ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • RDB(Snapshot)
    • ์ฃผ๊ธฐ์ ์œผ๋กœ Redis RDB Dump ํฌ๋งท์— ๋งž์ถฐ Fork๋ฅผ ๋– ์„œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ full scanํ•˜์—ฌ ๋””์Šคํฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(Snapshot). 
    • "SAVE", "BGSAVE"์˜ ์ฐจ์ด๋Š” BG์˜ ๊ฒฝ์šฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ง„ํ–‰ํ•˜๋‚˜ SAVE์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  RDB ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ์— ํ•ด๋‹น ์‹œ๊ฐ„๋™์•ˆ์€ ์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์—†์Œ.
  • AOF(Append On File)
    • ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์˜ ์ˆ˜์ • ๋‚ด์—ญ์„ append-only file์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๋งค ํŠธ๋žœ์žญ์…˜์„ loggingํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ์—†์œผ๋ฉฐ ํ•ญ์ƒ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๋ฐฑ์—… ๊ฐ€๋Šฅ.
    • ์ด๋•Œ, AOF ํŒŒ์ผ์ด ์ผ์ • ํฌ๊ธฐ ์ด์ƒ๋˜๋ฉด, ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ RDB ๋ฐฉ์‹์œผ๋กœ ๋คํ”„ํ•˜๊ณ  AOF ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•จ.
    • ์—ฌ๊ธฐ์„œ, ์„œ๋ฒ„๊ฐ€ ์žฌ์‹œ์ž‘๋  ๋•Œ ๋ฐฑ์—…๋œ ์Šค๋ƒ…์ƒท์„ reloadํ•˜๊ณ  AOF์˜ ๋กœ๊ทธ๋ฅผ replay ํ•˜๊ธฐ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์Šค๋ƒ…์ƒท์„ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ.

3.4 ํŠธ๋žœ์žญ์…˜ ์ง€์›

  • WATCH / MULTI / EXEC ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ optimistic lock ๊ธฐ๋ฐ˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•จ.
    • MULTI: ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
    • DISCARD: ํŠธ๋žœ์žญ์…˜ ์ทจ์†Œ
    • EXEC: ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹
    • WATCH: ํŠน์ • key์˜ ๋ณ€๊ฒฝ ์—ฌ๋ถ€ ๊ฐ์‹œ
    • UNWATCH: watch ์ทจ์†Œ

3.5 Pub/Sub ์ง€์›

  • Redis๋Š” ๋ฉ”์‹œ์ง• ์†”๋ฃจ์…˜์œผ๋กœ pub/sub์„ ์ง€์›ํ•จ.
  • ๋ฉ”์‹œ์ง€๋“ค์„ queue๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ , publichํ•˜๋Š” ์‹œ์  ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋ฆฌ subscribe ๋“ฑ๋ก ๋Œ€๊ธฐ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•จ.

4. ์ถ”๊ฐ€์ ์œผ๋กœ ์ฐพ์•„๋ณด๋ฉด ์ข‹์€ ๊ฐœ๋…

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•