| μΌ | μ | ν | μ | λͺ© | κΈ | ν |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- μ€λ λ
- reducible
- 99ν΄λ½
- 그리λ μκ³ λ¦¬μ¦
- μ½λ©ν μ€νΈμ€λΉ
- μμλ²νΈ
- νν΄99
- mariadb
- til
- λΉμ£ΌκΈ°μ νΈ
- java thread
- xv6
- μ€λ₯μ μ΄
- tcp μΈκ·Έλ¨ΌνΈ
- μ£ΌκΈ°μ νΈ
- git merge
- λ©ν°νλ μ±
- κ°λ°μμ·¨μ
- IEEE 802
- ν°μ€ν 리μ±λ¦°μ§
- λ°μ΄ν° μ μ‘
- i-type
- ν ν° λ²μ€
- μ°λΆν¬db
- νλ μ ꡬ쑰
- well known ν¬νΈ
- μ€λ₯κ²μΆ
- μλΉμ€ ν리미ν°λΈ
- νλ‘μ΄λμμ
- μ€λΈμ
- Today
- Total
UnfazedβοΈπ―
Redis ν€ (νμ λ³ λ°μ΄ν° μ‘°ν, KEYS, SCAN λΉκ΅) λ³Έλ¬Έ
μ΄λ² κΈμμλ Redisμ λ€μν λ°μ΄ν° νμ μ μμλ³΄κ³ , κ° νμ μ λ§λ κ°μ μμ½κ² μ‘°ννλ λ°©λ²μ μμλ³΄κ² μ΅λλ€.
1. νμ (TYPE) νμΈνκΈ°
κ°μ μ‘°ννκΈ° μ μ κ°μ₯ λ¨Όμ ν μΌμ ν΄λΉ ν€κ° μ΄λ€ λ°μ΄ν° νμ μΌλ‘ μ μ₯λμ΄ μλμ§ νμΈνλ κ²μ λλ€. μ΄λ TYPE λͺ λ Ήμ΄λ₯Ό μ¬μ©ν©λλ€.
# 'weather:active:regions'λΌλ ν€μ νμ
μ νμΈ
127.0.0.1:6379[1]> TYPE weather:active:regions
zset
TYPE λͺ λ Ήμ΄λ λ€μκ³Ό κ°μ λνμ μΈ νμ μ λ°νν©λλ€.
- string: κ°μ₯ κΈ°λ³Έμ μΈ λ¬Έμμ΄. κ°λ¨ν ν μ€νΈλΆν° JSON λ°μ΄ν°κΉμ§ λ΄μ μ μμ
- hash: μ¬λ¬ νλ(field)μ κ°(value) μμΌλ‘ μ΄λ£¨μ΄μ§ κ°μ²΄
- list: λ°μ΄ν°κ° μ λ ₯λ μμλ₯Ό κΈ°μ΅νλ λͺ©λ‘
- set: μμ μμ΄, μ€λ³΅λμ§ μλ κ°λ€μ μ§ν©
- zset (Sorted Set): μ μ(score)κ° λ§€κ²¨μ Έ μ λ ¬λ μ§ν©.
μ΄μ κ° νμ μ΄ λ¬΄μμ΄κ³ , μ΄λ»κ² μ‘°ννλμ§ μμλ³΄κ² μ΅λλ€.
2. νμ λ³ λ°μ΄ν° μ‘°ννκΈ°
2.1) String
κ°μ₯ κΈ°λ³Έμ μ΄κ³ λ리 μ°μ΄λ νμ μ λλ€.
- μΈμ μ¬μ©ν κΉ?: μ¬μ©μ μΈμ μ 보, μΊμ λ μΉνμ΄μ§ HTML, κ°λ¨ν μΉ΄μ΄ν° κ° λ±μ μ μ₯ν λ μ μ©ν©λλ€.
- μ‘°ν λͺ λ Ήμ΄: GET
# "weather:forecast:..." ν€μ μ μ₯λ κ° μ‘°ν
127.0.0.1:6379[1]> GET weather:forecast:2235:832:2000
"{\"temp\":25.3,\"icon\":\"sunny\",\"humidity\":40}"
2.2) Hash
νλμ ν€ μμ 'μ΄λ¦: μμΈ', 'μλ: 37.56'μ²λΌ μ¬λ¬ κ°μ νλ-κ° μμ μ μ₯νλ ꡬ쑰μ λλ€. ν μ¬λμ λͺ ν¨ μ 보μ²λΌ κ΄λ ¨ λ°μ΄ν°λ₯Ό λ¬Άμ΄λκΈ°μ μ’μ΅λλ€.
- μΈμ μ¬μ©ν κΉ?: μ¬μ©μμ νλ‘ν μ 보(ID, μ΄λ¦, μ΄λ©μΌ λ±)μ²λΌ νλμ κ°λ μ ꡬμ±νλ μ¬λ¬ μμ±μ μ μ₯ν λ μ ν©ν©λλ€.
- μ‘°ν λͺ λ Ήμ΄: HGETALL (λͺ¨λ νλ/κ°), HGET (νΉμ νλ)
# λͺ¨λ μ 보λ₯Ό ν λ²μ μ‘°ν
127.0.0.1:6379[1]> HGETALL weather:location:2235:832
1) "id"
2) "832"
3) "name"
4) "Seoul"
...
# 'name' νλλ§ μ½ μ§μ΄ μ‘°ν
127.0.0.1:6379[1]> HGET weather:location:2235:832 name
"Seoul"
2.3) List
λ°μ΄ν°κ° λ€μ΄μ¨ μμλλ‘ μ μ₯λλ μλ£κ΅¬μ‘°μ λλ€. νμλΌμΈμ΄λ λκΈ°μ΄μ²λΌ μμκ° μ€μν λ μ¬μ©ν©λλ€.
- μΈμ μ¬μ©ν κΉ?: μ΅μ λ΄μ€ λͺ©λ‘, μ¬μ©μμ μ΅κ·Ό νλ κΈ°λ‘, μ±ν λ©μμ§ ν λ±μ ꡬνν λ μ μ©ν©λλ€.
- μ‘°ν λͺ λ Ήμ΄: LRANGE (λ²μλ₯Ό μ§μ νμ¬ μ‘°ν)
# 0λ²μ§ΈλΆν° λ§μ§λ§(-1) λ°μ΄ν°κΉμ§ λͺ¨λ μ‘°ν
127.0.0.1:6379[1]> LRANGE weather:active:regions 0 -1
1) "us-east"
2) "us-west"
3) "eu-central"
2.4) Set
Listμ λΉμ·νμ§λ§ μ€λ³΅λ κ°μ νμ©νμ§ μλ κ³ μ ν κ°λ€μ μ§ν©μ λλ€. μμλ 보μ₯λμ§ μμ΅λλ€.
- μΈμ μ¬μ©ν κΉ?: νΉμ κ²μλ¬Όμ 'μ’μμ'λ₯Ό λλ₯Έ μ¬μ©μ λͺ©λ‘, νΉμ νκ·Έλ₯Ό κ°μ§ λͺ¨λ μν ID λ± μ λν¬ν κ°λ€μ κ΄λ¦¬ν λ μ¬μ©ν©λλ€.
- μ‘°ν λͺ λ Ήμ΄: SMEMBERS (λͺ¨λ λ©€λ² μ‘°ν)
127.0.0.1:6379[1]> SMEMBERS weather:alert:types
1) "storm"
2) "flood"
3) "heatwave"
2.5) Sorted Set (ZSet)
Setμ²λΌ μ€λ³΅λμ§ μλ κ°μ μ μ₯νμ§λ§, κ° κ°λ§λ€ μ μ(score)λ₯Ό λΆμ¬νμ¬ μ μ κΈ°μ€μΌλ‘ μ λ ¬ν μ μλ νΉλ³ν νμ μ λλ€.
- μΈμ μ¬μ©ν κΉ?: κ²μ λνΉ, μ€μκ° μΈκΈ° κ²μμ΄ μμ, μ°μ μμκ° μλ μμ λͺ©λ‘ λ± μμ λ§€κΈ°κΈ°κ° νμν λ μ΅μ μ μ νμ λλ€.
- μ‘°ν λͺ λ Ήμ΄: ZRANGE (μ μ κΈ°μ€ μ€λ¦μ°¨μ), ZREVRANGE (λ΄λ¦Όμ°¨μ)
# λνΉ 0μλΆν° λκΉμ§ μ μμ ν¨κ» μ‘°ν (μ€λ¦μ°¨μ)
127.0.0.1:6379[1]> ZRANGE weather:temperature:ranking 0 -1 WITHSCORES
1) "seoul"
2) "15.5"
3) "busan"
4) "18.2"
3. μ μ©ν μΆκ° λͺ λ Ήμ΄
λ°μ΄ν°λ₯Ό μ‘°ννλ κ² μΈμλ ν€μ μνλ₯Ό νμΈνλ μ μ©ν λͺ λ Ήμ΄λ€μ΄ μμ΅λλ€.
- ν€κ° μ‘΄μ¬νλμ§ νμΈ: EXISTS [key]
- 1μ λ°ννλ©΄ μ‘΄μ¬, 0μ΄λ©΄ μ‘΄μ¬νμ§ μμ
- ν€μ λ¨μ μλͺ
(μ΄) νμΈ: TTL [key]
- 3600 μ²λΌ λ¨μ μκ°μ΄ λ°νλκ±°λ, -1 (μꡬ), -2 (μ‘΄μ¬νμ§ μμ)κ° λ°ν
- ν€κ° μ¬μ©νλ λ©λͺ¨λ¦¬ μ©λ νμΈ: MEMORY USAGE [key]
- λ°μ΄νΈ(byte) λ¨μλ‘ λ©λͺ¨λ¦¬ μ¬μ©λ μ 곡
4. μ£Όμμ
λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ ν€λ₯Ό νμνλ KEYS weather:* λͺ λ Ήμ΄λ μ΄μ μ€μΈ Redis μλ²μμ μ¬μ©μ μ£Όμκ° νμν©λλ€. ν€κ° μλ°±λ§ κ° μ΄μμΌ κ²½μ°, KEYS λͺ λ Ήμ΄ νλκ° μλ² μ 체λ₯Ό λͺ μ΄κ° λ©μΆκ² ν μ μμ΅λλ€.
λμ , μλ²μ λΆνλ₯Ό μ£Όμ§ μκ³ μμ νκ² ν€λ₯Ό νμνλ SCAN λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ κ²μ΄ κΆμ₯λ©λλ€.
# 컀μλ₯Ό 0λΆν° μμν΄μ 'weather:*' ν¨ν΄μ ν€λ₯Ό 10κ°μ© μ μ§μ μΌλ‘ νμ
127.0.0.1:6379[1]> SCAN 0 MATCH weather:* COUNT 10
KEYSμ Blocking λ°©μ
KEYS λͺ λ Ήμ΄μ μ±λ₯ μ ν λ¬Έμ λ Redisμ λ¨μΌ μ€λ λ(Single-Thread) μ€ν λͺ¨λΈμ κΈ°μΈν©λλ€. Redisλ λλΆλΆμ λͺ λ Ήμ΄λ₯Ό λ¨μΌ μ€λ λ μμμ μμ°¨μ μΌλ‘ μ²λ¦¬νλ―λ‘, ν λ²μ νλμ μμ λ§ μνν μ μμ΅λλ€.
KEYS λͺ λ Ήμ΄λ λνμ μΈ λΈλ‘νΉ(Blocking) μ°μ°μΌλ‘, λ€μκ³Ό κ°μ κ³Όμ μ λ¨ ν λ²μ μμ μΌλ‘ μνν©λλ€.
- μ 체 ν€μ€νμ΄μ€(Keyspace) μν: Redisλ λ°μ΄ν°λ² μ΄μ€μ μ‘΄μ¬νλ λͺ¨λ ν€λ₯Ό μννκΈ° μμν©λλ€. λ°μ΄ν°μ μ ν¬κΈ°κ° ν΄μλ‘ μ΄ κ³Όμ μ μκ° λ³΅μ‘λλ O(N)μΌλ‘ μ ν μ¦κ°ν©λλ€.
- ν¨ν΄ λ§€μΉ: μννλ κ° ν€μ λν΄ μ£Όμ΄μ§ ν¨ν΄κ³Όμ μΌμΉ μ¬λΆλ₯Ό κ²μ¬ν©λλ€.
- κ²°κ³Ό μ§ν© ꡬμ±: μΌμΉνλ ν€λ€μ λ©λͺ¨λ¦¬ λ΄μ κ²°κ³Ό μ§ν©μ μΆκ°ν©λλ€.
- κ²°κ³Ό λ°ν: μ 체 ν€μ€νμ΄μ€ μνκ° μλ£λ νμμΌ κ΅¬μ±λ κ²°κ³Ό μ§ν©μ ν΄λΌμ΄μΈνΈμκ² λ°νν©λλ€.
μ΄ λͺ¨λ κ³Όμ μ΄ μλ£λ λκΉμ§ ν΄λΉ μ€λ λκ° λ€λ₯Έ μ΄λ€ μμ λ μ²λ¦¬νμ§ λͺ»νκ³ μμ ν μ μ λ©λλ€. λ§μ½ μλ°±λ§ κ°μ ν€λ₯Ό μννλ λ° μ μ΄κ° μμλλ€λ©΄, κ·Έ μκ° λμ Redis μΈμ€ν΄μ€λ λ€λ₯Έ λͺ¨λ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νμ§ λͺ»νλ μλ΅ λΆκ°λ₯(unresponsive) μνκ° λ©λλ€. μ΄λ μλΉμ€ μ 체μ μ§μ° μκ°(Latency) κΈμ¦μΌλ‘ μ΄μ΄μ§λλ€.
SCANμ Non-Blocking λ°©μ
SCANμ μ΄λ¬ν λΈλ‘νΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ μ§μ μν λ°©μμ μ±ννμ΅λλ€. μ΄λ μ₯μκ° μμλ μ μλ μμ μ μ¬λ¬ κ°μ μ§§μ λ¨κ³λ‘ λΆν νμ¬ μ€ννλ Non-Blocking μ°μ°μ λλ€.
SCANμ 컀μ(cursor) κΈ°λ°μ λ©μ»€λμ¦μ μ¬μ©ν©λλ€.
- μν μμ: ν΄λΌμ΄μΈνΈλ SCAN 0 MATCH... μ κ°μ΄ 컀μ κ°μ 0μΌλ‘ μ€μ νμ¬ μνλ₯Ό μμν©λλ€.
- μ νλ μν λ° μλ΅: Redisλ λ΄λΆμ μΌλ‘ μ ν΄μ§ μμ μμ λ§ μννμ¬ μΌλΆ ν€λ₯Ό μ€μΊνκ³ , ν΄λΉ μ€μΊμμ λ°κ²¬λ κ²°κ³Όμ ν¨κ» λ€μ μνλ₯Ό μμν μ§μ μΈ μλ‘μ΄ μ»€μ κ°μ λ°νν©λλ€. μ΄ μ°μ°μ λ§€μ° μ§§μ μκ° μμ μλ£λ©λλ€.
- λ€λ₯Έ μμ² μ²λ¦¬: λ€μ SCAN μμ²μ΄ λ€μ΄μ€κΈ° μ κΉμ§, Redis μ€λ λλ λ€λ₯Έ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬ν μ μλ μ¬μ λ₯Ό κ°κ² λ©λλ€. λ°λΌμ μλ²λ μ§μμ μΌλ‘ μλ΅ κ°λ₯ν μνλ₯Ό μ μ§ν©λλ€.
- μν μ¬κ°: ν΄λΌμ΄μΈνΈλ μ΄μ λ¨κ³μμ λ°νλ μλ‘μ΄ μ»€μ κ°μ μ¬μ©νμ¬ SCAN λͺ λ Ήμ λ€μ μ μ‘ν¨μΌλ‘μ¨ μνλ₯Ό μ΄μ΄κ°λλ€.
- μν μλ£: Redisκ° λ€μ 0λ² μ»€μλ₯Ό λ°ννλ©΄, μ 체 ν€μ€νμ΄μ€ μνκ° μλ£λμμμ μλ―Έν©λλ€.
SCANμ μ 체 μνλ₯Ό μλ£νκΈ°κΉμ§μ μ΄ μ€ν μκ°μ λ κΈΈ μ μμΌλ, κ° λ¨κ³λ₯Ό μ§§κ² λλμ΄ μ€νν¨μΌλ‘μ¨ μλ² μ 체μ μ΄μμ μν₯μ λ―ΈμΉλ λΈλ‘νΉ νμμ λ°©μ§νκ³ μμ μ μΈ μλΉμ€ μ΄μμ 보μ₯ν©λλ€.
λ°λΌμ, μ΄μ νκ²½μμ μλΉμ€μ κ°μ©μ±κ³Ό μμ μ±μ 보μ₯νκΈ° μν΄μλ KEYS λμ SCANμ μ¬μ©μ΄ κΆμ₯λ©λλ€.
'DB > Redis' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Spring Data Redis] RedisTemplate.opsForValue().get(key) (0) | 2025.07.17 |
|---|