이번 ν¬μŠ€νŒ…μ—μ„œλŠ” κ°„λž΅ν•˜κ²Œ λ ˆλ””μŠ€μ— μ–΄λ– ν•œ νƒ€μž…μ΄ 있고 μ–΄λ–€ λͺ…λ Ήμ–΄λ‘œ ν•΄λ‹Ή νƒ€μž…μ˜ 값을 μΆ”κ°€ λ˜λŠ” μ‘°νšŒν•˜λŠ” 지 λ“±μ˜ 예제λ₯Ό λ³΄μ—¬λ“œλ¦΄ κ²λ‹ˆλ‹€.

λ ˆλ””μŠ€λŠ” String, Hash, List, Set, Sorted Set λ“±μ˜ λ°μ΄ν„° νƒ€μž…μ„ μ§€μ›ν•©λ‹ˆλ‹€.


Strings (슀트링)

λ ˆλ””μŠ€ μŠ€νŠΈλ§μ€ 순차적인 λ°”μ΄νŠΈλ“€μž…λ‹ˆλ‹€. λ ˆλ””μŠ€μ—μ„œ μŠ€νŠΈλ§μ€ binary safeν•œλ° 이것은 슀트링이 μ•Œμˆ˜μžˆλŠ” 길이λ₯Ό 가지고 있고 μ–΄λ–€ νŠΉλ³„ν•œ μ’…λ£Œλ¬Έμžμ— μ˜ν•΄ μ’…λ£Œλ˜μ§€ μ•ŠλŠ” λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. λ”°λΌμ„œ, ν•œ μŠ€νŠΈλ§λ‹Ή μ΅œλŒ€ 512MB 길이의 값을 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Example (예제)

redis 127.0.0.1:6379> SET name "keichee" OK redis 127.0.0.1:6379> GET name "keichee"

μœ„ μ˜ˆμ œμ—μ„œ μ‚¬μš©λœ SETκ³Ό GETλͺ…λ Ήμ–΄λŠ” 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μ‘°νšŒν•  λ•Œ μ‚¬μš©λ˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

그리고 name은 λ ˆλ””μŠ€μ— μ €μž₯ν•  λ•Œ ν‚€ 값을 μ˜λ―Έν•˜λ©° "keichee"λŠ” nameμ΄λΌλŠ” 킀에 λŒ€μ‘ν•΄μ„œ μ €μž₯될 값을 μ˜λ―Έν•©λ‹ˆλ‹€.


Hashes (해쉬)

λ ˆλ””μŠ€ ν•΄μ‰¬λŠ” ν‚€-κ°’ νŽ˜μ–΄μ˜ μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€. 슀트링 ν•„λ“œμ™€ 슀트링 값을 맀핑해주기 λ•Œλ¬Έμ— 객체λ₯Ό ν‘œν˜„ν•  λ•Œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€.

Example

redis 127.0.0.1:6379> HMSET user:1 wow awesome keichee handsome blah handsome
OK
redis 127.0.0.1:6379> HGETALL user:1

1) "wow"
2) "awesome"
3) "keichee"
4) "handsome"
5) "blah"
6) "handsome"

μœ„ μ˜ˆμ œμ—μ„œ user:1 μ΄λΌλŠ” 킀에 wow, awesome, keichee, handsome, blah, handsome μ΄λΌλŠ” 값을 μ„ΈνŒ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ HMSET은 해쉬에 μ €μž₯ν•  λ•Œ, HGETALL μ€ 해쉬에 μ €μž₯된 데이터λ₯Ό μ‘°νšŒν•  λ•Œ μ‚¬μš©λ˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

해쉬에 μ €μž₯ν•  수 μžˆλŠ” ν‚€-κ°’ νŽ˜μ–΄μ˜ κ°œμˆ˜λŠ” 총 (2^32) - 1 개 μž…λ‹ˆλ‹€.


Lists (리슀트)

λ¦¬μŠ€νŠΈλŠ” λͺ©λ‘ν˜•νƒœμ˜ 데이터 νƒ€μž…μ„ λ§ν•©λ‹ˆλ‹€. 슀트링 λͺ©λ‘μ„ λ§ν•˜λ©° μ‚½μž…ν•œ μˆœμ„œλŒ€λ‘œ μ •λ ¬λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€. 

λ ˆλ””μŠ€ λ¦¬μŠ€νŠΈλŠ” 제일 μ•žμ— μΆ”κ°€ν•˜λŠ” 것과 제일 λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•˜λŠ” λͺ…λ Ήμ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€..

Example

redis 127.0.0.1:6379> lpush dblist redis
(integer) 1
redis 127.0.0.1:6379> lpush dblist mongodb
(integer) 2 redis 127.0.0.1:6379> lpush dblist rabitmq
(integer) 3 redis 127.0.0.1:6379> lrange dblist 0 10
1) "rabitmq" 2) "mongodb" 3) "redis"

리슀트의 μ΅œλŒ€ κΈΈμ΄λŠ” (2^32) - 1 개 μž…λ‹ˆλ‹€. (총 4294967295 개).

lpushλŠ” 리슀트의 제일 μ•žμ— 데이터λ₯Ό μΆ”κ°€ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€. 

lpush dblist redis λͺ…λ Ήμ–΄λŠ” dblistλΌλŠ” μ΄λ¦„μ˜ λ¦¬μŠ€νŠΈμ— redisλΌλŠ” 값을 μ €μž₯ν•˜λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

μœ„ μ˜ˆμ œμ—μ„œλŠ” redis, mongodb, rabitmqλ₯Ό dblistλΌλŠ” λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œ λ’€ lrange λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ 0λΆ€ν„° 10κΉŒμ§€μ˜ 데이터λ₯Ό μ‘°νšŒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.


Sets (집합)

λ ˆλ””μŠ€μ—μ„œ 집합은 μ •λ ¬λ˜μ§€ μ•Šμ€ 슀트링 λͺ©λ‘μ„ λ§ν•©λ‹ˆλ‹€. 

μ„ΈνŠΈλŠ” μΆ”κ°€, μ‚­μ œ, 그리고 μ‘΄μž¬μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό O(1) μ‹œκ°„λ³΅μž‘λ„λ‘œ μ œκ³΅ν•©λ‹ˆλ‹€.

Example

redis 127.0.0.1:6379> sadd dbset redis
(integer) 1 redis 127.0.0.1:6379> sadd dbset mongodb (integer) 1 redis 127.0.0.1:6379> sadd dbset rabitmq (integer) 1 redis 127.0.0.1:6379> sadd dbset rabitmq (integer) 0 redis 127.0.0.1:6379> smembers dbset 1) "rabitmq" 2) "mongodb" 3) "redis"

NOTE: μœ„ μ˜ˆμ œμ—μ„œ rabitmqλŠ” 두 번 μΆ”κ°€κ°€ λ˜μ—ˆμ§€λ§Œ μ„ΈνŠΈμ˜ κΈ°λ³Έ 속성인 μœ λ‹ˆν¬ 속성 λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ rabitmq만 μ €μž₯λ©λ‹ˆλ‹€.

saddλŠ” 집합에 데이터λ₯Ό μΆ”κ°€ν•  λ•Œ μ“°μ΄λŠ” λͺ…령어이며, 집합을 μ‘°νšŒν•  λ•Œμ—λŠ” smembers λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

μ‘°νšŒλ˜λŠ” λ°μ΄ν„°λŠ” 집합에 μΆ”κ°€λœ μˆœμ„œμ™€λŠ” 관계없이 λžœλ€ν•˜κ²Œ μ‘°νšŒκ°€ λ©λ‹ˆλ‹€. 즉, μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

set에 μ €μž₯ν•  수 μžˆλŠ” 데이터 개수 μ—­μ‹œ (2^32) - 1 κ°œμž…λ‹ˆλ‹€. 


Sorted Sets (μ •λ ¬ 집합)

μ •λ ¬λœ 집합은 λ§κ·ΈλŒ€λ‘œ 집합인데 μ •λ ¬λœ 것을 λ§ν•©λ‹ˆλ‹€. μœ λ‹ˆν¬ 속성 μ—­μ‹œ κ·ΈλŒ€λ‘œ 가지고 있으며. 일반 μ§‘ν•©κ³Όμ˜ 차이점은 정렬을 μœ„ν•œ score 값을 가지고 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

Example

redis 127.0.0.1:6379> zadd sorted 0 redis (integer) 1 redis 127.0.0.1:6379> zadd sorted 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd sorted 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd sorted 0 rabitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE sorted 0 1000 1) "redis" 2) "mongodb" 3) "rabitmq"

μœ„ μ˜ˆμ œμ—μ„œ 처럼 정렬집합에 데이터λ₯Ό λ„£μ„λ•ŒλŠ” zadd λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©° 집합λͺ… λ‹€μŒμ— score(점수)λ₯Ό λͺ…μ‹œν•΄μ£ΌλŠ”λ°,


이 μ μˆ˜λŠ” 각 데이터 λ§ˆλ‹€ μ€‘λ³΅ν•˜μ—¬ μ‚¬μš©λ  수 있으며 μ€‘λ³΅λœ 점수λ₯Ό κ°–λŠ” λ°μ΄ν„°λŠ” 쑰회 μ‹œ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


ZRANGEBYSCORE λͺ…λ Ήμ–΄λŠ” 점수λ₯Ό κΈ°μ€€μœΌλ‘œ 집합을 쑰회 ν•˜λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€.




이 외에도 슀트링 기반의 λΉ„νŠΈλ§΅(Bitmap)μ΄λ‚˜ ν•˜μ΄νΌλ‘œκ·Έλ‘œκ·ΈμŠ€(HyperLogLogs)와 같은 데이터 νƒ€μž…λ„ μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 


μ΄λŸ¬ν•œ νƒ€μž…μ— λŒ€ν•΄μ„œ λ ˆλ””μŠ€ 곡식 λ¬Έμ„œμ—λŠ” μ•„λž˜μ™€ 같이 μ„€λͺ…을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • Bit arrays (or simply bitmaps): it is possible, using special commands, to handle String values like an array of bits: you can set and clear individual bits, count all the bits set to 1, find the first set or unset bit, and so forth.
슀트링 값을 λΉ„νŠΈμ˜ λ°°μ—΄λ‘œ 닀루기 μœ„ν•œ νŠΉλ³„ν•œ λͺ…λ Ήμ–΄λ₯Ό μ œκ³΅ν•œλ‹€κ³  ν•©λ‹ˆλ‹€. 각각의 λΉ„νŠΈλ₯Ό μ„ΈνŒ…ν•˜κ±°λ‚˜ 1둜 μ„ΈνŒ…λœ λͺ¨λ“  λΉ„νŠΈμ˜ 개수λ₯Ό κ΅¬ν•˜κ±°λ‚˜ ν•˜λŠ” λ“±λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • HyperLogLogs: this is a probabilistic data structure which is used in order to estimate the cardinality of a set. Don't be scared, it is simpler than it seems... See later in the HyperLogLog section of this tutorial.

톡계학적 데이타 ꡬ쑰둜 μ§‘ν•©μ˜ 카디날리티λ₯Ό μΈ‘μ •ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λœλ‹€κ³  ν•©λ‹ˆλ‹€. 생각보닀 μ‰¬μš°λ‹ˆκΉŒ μ‚¬μš©ν•˜κΈ°λ₯Ό λ‘λ €μ›Œν•˜μ§€ 말라고 ν•˜λ„€μš” γ…‹γ…‹


μžμ„Έν•œ λ‚΄μš©μ€ 각각의 데이터 νƒ€μž…μ— λŒ€ν•œ κ°œλ³„ ν¬μŠ€νŒ…μ—μ„œ ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. ^-^


이상 μΌ€μ΄μΉ˜μ˜€μŠ΅λ‹ˆλ‹€.


즐겁고 ν–‰λ³΅ν•œ ν•˜λ£¨ λ˜μ„Έμš”~