νλ ν μ λ²μΉ : μ°λ¦¬ μ¬νμμ μΌμ΄λλ νμμ 80%λ 20%μ μμΈμΌλ‘ μΈν΄ λ°μλ¨μ λ»νλ λ²μΉ
μΉ μ¬μ΄νΈμ λν μ κ·Όλ νλ ν μ λ²μΉμ΄ λ± λ€μ΄λ§μ, μΈν°λ· ν΅μ μ 80%κ° λΆκ³Ό 20%μ μ¬μ΄νΈμ λν μ‘μΈμ€λ‘ μΆμ λλ©°, μ΄ 20%μ μΉμ¬μ΄νΈ λ°μ΄ν°λ₯Ό μΊμν΄λλ©΄ ν¨μ¨μ κ·Ήμ μΌλ‘ ν₯μν μ μλ€
λ°λΌμ 곡ν΅μΌλ‘ μ¬μ©λλ λ°μ΄ν°λ λ λμ€λ₯Ό μ΄μ©νμ¬ μΊμλ‘ μ μ₯ν΄ λλ κ²μ΄ 리μμ€λ₯Ό ν¨μ¨μ μΌλ‘ μ΄μ©ν μ μλ λ°©λ²μ΄ λ μ μμ κ²
- μ΄μ μ€μΈ μΉ μλ²μμ ν€-κ° ννμ λ°μ΄ν° νμ
μ μ²λ¦¬νκ³ , I/Oκ° λΉλ²ν λ°μν΄ λ€λ₯Έ μ μ₯ λ°©μμ μ¬μ©νλ©΄ ν¨μ¨μ΄ λ¨μ΄μ§λ κ²½μ°μ μ¬μ©ν©λλ€.
- μ‘°νμλ μΉ΄μ΄νΈ ννμ λ°μ΄ν°
- μ¬μ©μμ μΈμ
κ΄λ¦¬
- μ¬μ©μμ μΈμ μ μ μ§νκ³ λΆλ¬μ€κ³ , μ¬λ¬ νλλ€μ μΆμ νλκ² λ§€μ° ν¨κ³Όμ μ λλ€.
- API μΊμ±
- λΌμ°νΈλ‘ λ€μ΄μ¨ μμ²μ λν΄ μμ² κ°μ μΊμ±νλ©΄ λμΌ μμ²μ λν΄ μΊμ±λ λ°μ΄ν°λ₯Ό 리ν΄νλ λ°©μ
λ λμ€λ In-Memory λ°μ΄ν°λ² μ΄μ€μ λλ€.
μ¦, λͺ¨λ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ μ₯νκ³ μ‘°νν©λλ€. κΈ°μ‘΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(Oracle, MySQL) λ³΄λ€ ν¨μ¬ λΉ λ₯Έλ° κ·Έ μ΄μ λ λ©λͺ¨λ¦¬ μ κ·Όμ΄ λμ€ν¬ μ κ·Όλ³΄λ€ λΉ λ₯΄κΈ° λλ¬Έμ λλ€.
νμ§λ§ λΉ λ₯΄λ€λ κ²μ λ λμ€μ μ¬λ¬ νΉμ§ μ€ μΌλΆλΆμ λλ€.
λ€λ₯Έ In-Memory λ°μ΄ν°λ² μ΄μ€(ex. Memcached) μμ κ°μ₯ ν° μ°¨μ΄μ μ λ€μν μλ£κ΅¬μ‘° λ₯Ό μ§μνλ€λ κ²μ λλ€.
λ λμ€λ μλμ²λΌ λ€μν μλ£κ΅¬μ‘°λ₯Ό Key-Value ννλ‘ μ μ₯ν©λλ€.
λ λμ€λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€κ° μλλλ€. λ λμ€λ κΈ°λ³Έμ μΌλ‘ String, Bitmap, Hash, List, Set, Sorted Set λ₯Ό μ 곡νκ³ , λ²μ μ΄ μ¬λΌκ°λ©΄μ νμ¬λ Geospatial Index, Hyperloglog, Stream λ±μ μλ£νλ μ§μνκ³ μμ΅λλ€.
κ·Έλ λ€λ©΄ μ΄λ κ² λ€μν μλ£κ΅¬μ‘°λ₯Ό μ 곡νλκ² μ μ€μν κΉμ?
λ°λ‘Β κ°λ°μ νΈμμ±κ³Ό λμ΄λΒ λλ¬Έμ λλ€.
μλ₯Ό λ€μ΄ μ€μκ° λνΉ μλ²λ₯Ό ꡬνν λ κ΄κ³ν DBMSλ₯Ό μ΄μ©νλ€λ©΄ DBμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , μ μ₯λ SCORE κ°μΌλ‘ μ λ ¬νμ¬ λ€μ μ½μ΄μ€λ κ³Όμ μ΄ νμν κ²μ λλ€. κ°μκ° λ§μμ§λ©΄ μλκ° λλ €μ§ ν λ°μ, μ΄ κ³Όμ μμ λμ€ν¬λ₯Ό μ¬μ©νκΈ° λλ¬Έμ λλ€. In-memory κΈ°λ°μΌλ‘ μλ²μμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλλ‘ μ§μ μ½λλ₯Ό μ§€ μλ μκ² μ§λ§.. λ λμ€μ Sorted-Set(Replicatoin)μ μ΄μ©νλκ² λ λΉ λ₯΄κ³ κ°λ¨ν λ°©λ²μΌ κ²μ λλ€
λ λμ€λ νΈλμμ μ λ¬Έμ λ ν΄κ²°ν΄ μ€ μ μμ΅λλ€.
Redis μλ£κ΅¬μ‘°λ Atomic νλ€λ νΉμ§ λλ¬Έμ race condition μ νΌν μ μμ΅λλ€.
μ¦, Redis Transaction μ νλ²μ λ± νλμ λͺ λ Ήλ§ μνν μ μμ΅λλ€.
μ΄μ λνμ¬ single-threaded νΉμ± μ μ μ§νκ³ μκΈ° λλ¬Έμ λ€λ₯Έ μ€ν λ¦¬μ§ νλ«νΌλ³΄λ€λ μ΄μκ° λνλ€κ³ ν©λλ€
μ¦, μΈλΆμ Collectionsμ μ μ΄μ©νλ κ²λ§μΌλ‘ κ°λ° μκ° λ¨μΆμ΄ κ°λ₯νκ³ , μκ°νμ§ λͺ»ν μ¬λ¬κ°μ§ λ¬Έμ λ₯Ό μ€μ¬μ€ μ μμΌλ―λ‘ κ°λ°μλ λΉμ¦λμ€ λ‘μ§μ μ§μ€ν μ μλ€λ ν° μ₯μ μ΄ μ‘΄μ¬ν©λλ€
κ°μ₯ μΌλ°μ μΈ ννλ‘, key - value λ‘ μ μ₯νλ ννμ΄λ€.
string νμ μλ λͺ¨λ μ’ λ₯μ λ¬Έμμ΄(μ΄μ§ λ°μ΄ν° ν¬ν¨) μ μ μ₯ν μ μμ΅λλ€. λ°λΌμ JPEG μ΄λ―Έμ§λ₯Ό μ μ₯νκ±°λ, HTML fragment λ₯Ό μΊμνλ μ©λλ‘ μμ£Ό μ¬μ©ν©λλ€
λ λμ€μ listλ μΌλ°μ μΈ linked list μ νΉμ§μ κ°κ³ μμ΅λλ€. λ°λΌμ list λ΄μ μλ°±λ§ κ°μ μμ΄ν μ΄ μλλΌλ headμ tailμ κ°μ μΆκ°ν λ λμΌν μκ°μ΄ μμλ©λλ€. νΉμ κ°μ΄λ μΈλ±μ€λ‘ λ°μ΄ν°λ₯Ό μ°Ύκ±°λ μμ ν μ μμ΅λλ€.
hashλ field-value μμ μ¬μ©ν μΌλ°μ μΈ ν΄μμ λλ€. keyμ λν filedμ κ°―μμλ μ νμ΄ μμΌλ―λ‘ μ¬λ¬ λ°©λ²μΌλ‘ μ¬μ©μ΄ κ°λ₯ν©λλ€.
fieldμ valueλ‘ κ΅¬μ±λλ€λ λ©΄μμ hashλ RDBμ tableκ³Ό λΉμ·ν©λλ€.
setμ μ λ ¬λμ§ μμ λ¬Έμμ΄μ λͺ¨μμ λλ€. μΌλ°μ μΈ setμ΄ κ·Έλ λ―μ΄, μμ΄ν μ μ€λ³΅λ μ μμ΅λλ€. κ΅μ§ν©, ν©μ§ν©, μ°¨μ§ν© μ°μ°μ λ λμ€μμ μνν μ μκΈ° λλ¬Έμ setμ κ°μ²΄ κ°μ κ΄κ³λ₯Ό ννν λ μ’μ΅λλ€.
sorted setμ setκ³Ό λ§μ°¬κ°μ§λ‘ key νλμ μ€λ³΅λμ§ μλ μ¬λ¬ λ©€λ²λ₯Ό μ μ₯νμ§λ§, κ°κ°μ λ©€λ²λ μ€μ½μ΄μ μ°κ²°λ©λλ€. λͺ¨λ λ°μ΄ν°λ μ΄ κ°μΌλ‘ μ λ ¬λλ©°, μ€μ½μ΄κ° κ°λ€λ©΄ λ©€λ²κ°μ μ¬μ μμλ‘ μ λ ¬λ©λλ€. sorted setμ μ£Όλ‘ sortκ° νμν κ³³μ μ¬μ©λ©λλ€.
sorted setμ μ λ ¬λ ννλ‘ μ μ₯λκΈ° λλ¬Έμ λλ¬Έμ μΈλ±μ€λ₯Ό μ΄μ©νμ¬ λΉ λ₯΄κ² μ‘°νν μ μμ΅λλ€.
- νλμ 컬λ μ
μ λ무 λ§μ μμ΄ν
μ λ΄μΌλ©΄ μ’μ§ μλ€.
- 10000κ° μ΄ν λͺμ²κ° μμ€μΌλ‘ μ μ§νλκ² μ’λ€.
- Expireλ Collectionμ item κ°λ³λ‘ κ±Έλ¦¬μ§ μκ³ μ 체 Collectionμ λν΄μλ§ κ±Έλ¦°λ€.
- ν΄λΉ 10000κ°μ μμ΄ν μ κ°μ§ Collectionμ expireκ° κ±Έλ €μλ€λ©΄ κ·Έ μκ° νμ 10000κ°μ μμ΄ν μ΄ λͺ¨λ μμ .
λ λμ€μ ν€λ λ¬Έμμ΄μ΄κΈ° λλ¬Έμ 'abc'λΆν° JPEG νμΌκΉμ§ λͺ¨λ μ΄μ§ μνμ€λ₯Ό ν€λ‘ μ¬μ©ν μ μμ΅λλ€. λΉ λ¬Έμμ΄λ ν€κ° λ μ μμ΅λλ€. string νμ κ³Ό λ§μ°¬κ°μ§λ‘ νμ©λλ μ΅λ ν€ ν¬κΈ°λ 512MBμ λλ€.
ν€λ₯Ό μ‘°νν λμ λΉμ©μ μκ°νλ©΄, ν€λ₯Ό λ무 κΈΈκ² μ¬μ©νλ κ²μ κΆμ₯νμ§ μμ΅λλ€.
ν€μ κ΄λ ¨λ μ€μν κΈ°λ₯μΈ Expireμ λν΄μλ μμλ³΄κ² μ΅λλ€. λ λμ€λ in-memory DBμΈ λ§νΌ, λ©λͺ¨λ¦¬μ μ μ₯λ μ μλ λ°μ΄ν°λ νμ μ μ λλ€.
λμ΄μ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ κ²½μ° λ λμ€μμλ κ°μ₯ λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°λ₯Ό μμ νκ±°λ, κ°μ₯ μ΅κ·Όμ μ¬μ©λμ§ μμ λ°μ΄ν°λ₯Ό μμ νκ±°λ, νΉμ λμ΄μ λ°μ΄ν°λ₯Ό μ λ ₯λ°μ§ λͺ»νκ² λ©λλ€.
κ°μ₯ μ’μ λ°©λ²μ μμ λλ λ°μ΄ν°λ₯Ό λ λμ€μκ² λ§‘κΈ°μ§ μκ³ , μ§μ μ€μ νλ κ²μΌ κ²λλ€.
ν΄λΉ λ°μ΄ν°λ₯Ό μ λ ₯ν λ μ΄ λ°μ΄ν°μ μ¬μ© κΈ°νμ΄ μΈμ κΉμ§μΈμ§λ₯Ό μ§μ μ€μ ν΄ μ€μΌλ‘μ, μ΄ν리μΌμ΄μ μ΄ μ§μ λ°μ΄ν°μ μ¬μ© λ§λ£ μκ°μ μ ν μ μμ΅λλ€.
κ°λ¨ν ν€μ λν timeoutμ μ€μ νλ κ²μ λλ€. μ€μ λ timeout μκ°μ΄ κ²½κ³Όνλ©΄ ν€μ λν΄ DEL λͺ λ Ήμ΄λ₯Ό νΈμΆν κ²μ²λΌ ν€κ° μλμΌλ‘ μμ λ©λλ€.
λͺμ΄ λ€μ μμ λμ΄μΌ νλ€κ³ λ¨μ μκ°κ°μ μ΄μ©νκ±°λ, νΉμ μ λμ€μ timestampλ₯Ό μ¬μ©ν΄μ μμ λμ΄μΌ νλ μκ°μ μ€μ ν μλ μμ΅λλ€.
-
Redisλ In-Memory Data Store -In-Memory Cache λ€ λ³΄λ, λ©λͺ¨λ¦¬ λ³΄λ€ λ λ§μ λ°μ΄ν°λ₯Ό μ¨μ swapμ΄ λ°μνλ©΄ ν΄λΉ λ©λͺ¨λ¦¬ pageλ₯Ό μ κ·Όν λ λ§λ€ swap out μ΄ λ°μν΄μ, μλμ μμ²λ μν₯μ μ£Όκ² λ©λλ€.
-
Maxmemory, Maxmemory-policy
- Maxmemory: λ©λͺ¨λ¦¬ μ¬μ©λ μ ν, Maxmemory-policy: Maxmemory μμΉκΉμ§ λ©λͺ¨λ¦¬κ° λ€ μ°¨λ κ²½μ° Maxmemory policyμ λ°λΌ μΆκ° λ©λͺ¨λ¦¬λ₯Ό ν보
-
RSS κ°μ λͺ¨λν°λ§ ν΄μΌν¨
- RSS κ°μ λ°μ΄ν°λ₯Ό ν¬ν¨ν΄μ μ€μ λ‘ Redisκ° μ¬μ©νκ³ μλ λ©λͺ¨λ¦¬μΈλ°, μ΄ κ°μ μ€μ λ‘ μ¬μ©νκ³ μλ used-memory κ°λ³΄λ€ ν΄ μ μμ΅λλ€. μ΄λ¬ν νμμ΄ λ°μνλ μ΄μ λ OSκ° λ©λͺ¨λ¦¬λ₯Ό ν λΉν λ page μ¬μ΄μ¦μ λ°°μλ§νΌ ν λΉνκΈ° λλ¬Έμ λλ€. μλ₯Ό λ€μ΄ page size = 4096 μΈλ°, μμ² λ©λͺ¨λ¦¬ μ¬μ΄μ¦κ° 10μ΄λΌκ³ νλ©΄ OSλ 4096λ§νΌμ ν λΉν©λλ€. μ΄λ₯Ό ννΈν νμμ΄λΌκ³ νλλ° μ΄κ²μ΄ μ€μ μ¬μ©ν λ©λͺ¨λ¦¬λ ν λΉλ λ©λͺ¨λ¦¬κ° λ€λ₯Έ μμΈμ΄ λ©λλ€.
Redis λ Single Threaded μ΄λ€. λ°λΌμ λ λμ€κ° λμμ μ²λ¦¬ν μ μλ λͺ λ Ή κ°―μλ νλ²μ 1κ°μ΄λ€. νμ§λ§ μκ°λ§νΌ κ·Έλ κ² λ린건 μλκ², λ¨μν get / set μ κ²½μ°, Redis λ μ΄λΉ 10λ§κ°λ₯Ό μ²λ¦¬ν μ μλ€κ³ νλ€.
νμ§λ§ μ£Όμν μ λ μλκ², single-threaded μ΄κΈ° λλ¬Έμ μ²λ¦¬ μκ°μ΄ κΈ΄ λͺ λ Ήμ΄κ° λ€μ΄μ€λ©΄ κ·Έ λ€ λͺ λ Ήμ΄λ€μ μ λΆ λκΈ°κ° νμνλ€. μ¦, λ§μ½ 1κ°μ 1μ΄κ° 걸리λ μμ μ νκ² λλ²λ¦¬λ©΄? μ΅μ μ κ²½μ° 99999 κ°μ λͺ λ Ήμ 1μ΄λμ κ·Έλ₯ λκΈ°ν΄μΌ νλ κ²μ΄λ€. μ΄λ°κ±΄ 99999κ°μ νμμμμ΄ λ°μν μ μλ μν©μ΄λ€.
TCP μμλ ν¨ν·μ΄ λμ΄μ Έμ μ¬ μ μλ€. μ΄λ΄λ ν¨ν·μ΄ λ€μ΄μμ λͺ λ Ή νλλ₯Ό μ€νμν€λ κ³Όμ μ΄ μ΄λ»κ² μνλλμ§ μ 리νμλ€.
ν¨ν· νλκ° λ€μ΄μ€λ©΄ processInputBuffer μμ ν¨ν·μ νλμ command λ‘ λ§λ λ€. command κ° μμ±λλμ§ νμΈνκ³ command κ° μμ±λμμΌλ©΄ processCommandAndReset μ΄λΌλ κ±Έ ν΄μ λ€μ νκ³ λ€μ΄μ¨ ν κ·Έ μμ μ μμ±λ command νλλ₯Ό κ·Έλ₯ μ€νμμΌλ²λ¦°λ€. λ°λΌμ μ΄λ° μν©μμ ν΄λΉ ν¨ν· νλκ° μ²λ¦¬λλ λμ λ€μ ν¨ν·μ μ무κ²λ λͺ»νκ³ κ·Έλ₯ μμ΄λ κ²μ΄λ€. μ΄ν ν¨ν· μ²λ¦¬κ° μλ£λμ΄ λ£¨νλ₯Ό νμΆν΄μΌλ§ λ€μ κ·Έ λ€μ λͺ λ Ή (packet -> command) λ€μ μ²λ¦¬ν μ μλ€.
μ΄λ¬ν λμ κ³Όμ μμ μ μ μλ― Redis λ νλ²μ νλμ λͺ λ Ήλ§ μ€νν μ μκΈ° λλ¬Έμ κΈ΄ μ²λ¦¬μκ°μ μνλ λͺ λ Ήμ΄λ₯Ό μ°λ©΄ λΆλ¦¬νλ€. κ·ΈλΌ λ³΄ν΅ 'κΈ΄' λͺ λ Ήμ΄ λ μ μλ, λνμ μΈ O(N) λͺ λ Ήλ€μ 무μμ΄ μμκΉ.
KEYS : λͺ¨λ μμ΄ν μ μννλ λͺ λ Ήμ΄λ€. νμ§λ§ μμ΄ν μ΄ λ§μμ§λ©΄ μλ²μμ exception μ νΈλ¦¬κ±°νλ μ£Όμν΄μΌνλ€. μλ₯Ό λ€μ΄, Key κ° λ°±λ§κ° μ΄μμΈλ° νμΈμ μν΄ KEYS λͺ λ Ήμ μ¬μ©νλ κ²½μ°λ κ²°κ΅ λͺ¨λν°λ§ μ€ν¬λ¦½νΈκ° μΌμ΄μ νλ²μ© μ΄κ±Έ νΈμΆνκ² λλ κ²μ΄λ€. π
FLUSHALL, FLUSHDB : λ°μ΄ν°λ₯Ό λ€ λ λ¦°λ€.
Delete Collections : Collection λ΄ μμ΄ν μ μ λΆ μμ νλ λͺ λ Ήμ΄λ€. μλ₯Ό λ€μ΄ 100λ§κ° μμ΄ν μμ λ₯Ό μλνλ€λ©΄, μ΄ λͺ λ Ήμ μ²λ¦¬νλ λ°μλ§ 1~2μ΄ μ λ 걸리λ―λ‘ μ΄ μκ°λμ μ무κ²λ λͺ»νκ² λλ€.
Get All Collections : 10λ§κ°λ₯Ό λ§€λ² λ€ κ°μ Έμ¨λ€λ©΄? λΉμ°ν λλ €μ§λ€.
κ·ΈλΌ KEYS λ μ΄λ»κ² λ체νλκ² μ’μκΉ?
KEYS λμ scan λͺ λ Ήμ μ¬μ©νλ κ²μΌλ‘ νλμ κΈ΄ λͺ λ Ήμ μ§§μ μ¬λ¬λ²μ λͺ λ ΉμΌλ‘ λ°κΏ μ μλ€. μ΄ μ§§μ λͺ λ Ήλ€ ν μ¬μ΄μ λ€λ₯Έ get / set κ°μ λͺ λ Ήλ€μ λ μ€νμν¬ μ μλ€. μ΄ μ¬μ΄μ κ΅μ₯ν μ²λ¦¬λ₯Ό μ μμΌμ€λ€.
κ°μ λ§₯λ½μΌλ‘, Collection μ λͺ¨λ μμ΄ν μ λ€ κ°μ ΈμμΌν λλ Collection μ μΌλΆλ§ κ°μ Έμ€κ±°λ (Sorted Set), ν° μ»¬λ μ μ λ€λ₯Έ μ¬λ¬κ°μ 컬λ μ μΌλ‘ λλμ΄μ μ μ₯νλ€. 1κ°λΉ λͺ μ²κ° μμ€μΌλ‘ μ μ₯ν΄μΌ μ’λ€.
μ°μνν ν¬μΈλ―Έλ(μ°μνλ λμ€ by κ°λλͺ λ)
- Redisλ μ΄λ€ κ²½μ°μ μ¬μ©ν κΉμ?
- Redisμ μ₯μ μ 무μμ΄ μμκΉμ?