[λμμ±] Redis Concurrency Control(incr, Lettuce, Redisson Lock)
π― Redis Concurrency Control
Race Condition
κ²½μμνλ λ κ° μ΄μμ μ€λ λκ° κ³΅μ λ°μ΄ν°μ μ‘μΈμ€ ν μ μκ³ , λμμ λ³κ²½μ νλ €κ³ ν λ λ°μνλ λ¬Έμ
- Race Condition μΌλ‘ λμμ λ€μ΄μ€λ μμ²λ€μ΄ κ°±μ μ κ°μ μ½κ³ , μμ νλ©΄μ
- μ€μ κ°±μ μ΄ λλ½λλ νμμ΄ λ°μ
Series
πΉ Redis incr
Redisμ
INCR
λͺ λ Ήμ μ΄μ©νμ¬ νΉμ ν€μ κ°μ μμμ μΌλ‘ μ¦κ°μν€λ©΄μ
μΉ΄μ΄ν°λ μκ³κ° μ μ΄ λ±μ μμ μ μ¬μ©νλ λ°©λ²
μ μ.
- Redisλ λΉ λ₯Έ μλμ
μ±κΈ μ€λ λ
μ νΉμ±μ νμ©νμ¬λ μ΄μ€ 컨λμ
μ ν΄κ²° - λΉ λ₯Έ μ±λ₯μ κ°μ§
INCR
λͺ λ Ή(ν€μ λν κ°μ 1μ© μ¦κ°μν€λ λͺ λ Ήμ΄)μ μ΄μ©νμ¬ μκ³κ°μ μ μ΄
λμ λ°©μ.
INCR key
β μ£Όμ΄μ§key
μ κ°μ 1 μ¦κ°- ν€κ° μ‘΄μ¬νμ§ μμ κ²½μ°, λ¨Όμ ν΄λΉ ν€λ₯Ό 0μΌλ‘ μ΄κΈ°νν ν 1 μ¦κ°
μ₯μ .
μμμ μ°μ°
INCR
λͺ λ Ήμ΄λ Redisμ μ±κΈ μ€λ λ ꡬ쑰 λλΆμ μμμ μΌλ‘ μν- μ¬λ¬ ν΄λΌμ΄μΈνΈκ° λμμ
INCR
λͺ λ Ήμ΄λ₯Ό μ€νν΄λ μ€λ³΅λκ±°λ μλͺ»λ κ°μ΄ μ μ₯λμ§ μμ
κ°λ¨νκ³ λΉ λ¦
INCR
λͺ λ Ήμ΄λ λ§€μ° κ°λ¨νκ² μ¬μ©ν μ μμΌλ©°, Redisμ λΉ λ₯Έ μ±λ₯ λλΆμ μ€μκ° μΉ΄μ΄ν μμ μ λ§€μ° μ 리
λΆμ° νκ²½μμ μ¬μ© κ°λ₯
- Redisλ λΆμ° νκ²½μμ μ¬μ©λκΈ° λλ¬Έμ, μ¬λ¬ μλ² λλ μ ν리μΌμ΄μ μΈμ€ν΄μ€μμ μ€μ μ§μ€μ μΉ΄μ΄ν μ μ½κ² ꡬν κ°λ₯
μλ μ΄κΈ°ν
- ν€κ° μ‘΄μ¬νμ§ μλ κ²½μ°,
INCR
λͺ λ Ήμ΄λ μλμΌλ‘ ν€λ₯Ό 0μΌλ‘ μ΄κΈ°ννκ³ μ¦κ°(μ΄κΈ°ν μμ μ΄ λΆνμ)
- ν€κ° μ‘΄μ¬νμ§ μλ κ²½μ°,
λ¨μ .
λ°μ΄ν° μ μ€ κ°λ₯μ±
- Redisλ λ©λͺ¨λ¦¬ κΈ°λ° λ°μ΄ν° μ μ₯μμ΄λ―λ‘ μ§μμ± μ΅μ μ μ€μ νμ§ μμΌλ©΄ Redis μλ²κ° μ¬μμλκ±°λ μ₯μ κ° λ°μν κ²½μ° λ°μ΄ν° μ μ€ κ°λ₯μ± μ‘΄μ¬
- μΉ΄μ΄ν° κ°μ΄ μ€μν κ²½μ°, λ°μ΄ν° μ μ€μ λλΉν μΆκ°μ μΈ μ‘°μΉκ° νμ
μ μ΄λ μκ³κ° κ΄λ¦¬μ μ΄λ €μ
- νΉμ μκ³κ°μ λμμ λ μ΄λ₯Ό κ΄λ¦¬νκΈ° μν΄μλ μΆκ°μ μΈ λ‘μ§μ΄ νμ
νΈλμμ λ° λ³΅μ‘ν λ‘μ§ κ΅¬νμ μ΄λ €μ
- 볡μ‘ν νΈλμμ
μ λ€λ£¨κ±°λ μ¬λ¬ λ¨κ³μ μ°μ°μ΄ νμν κ²½μ°,
INCR
λ§μΌλ‘λ μ μ΄νκΈ° μ΄λ €μ
- 볡μ‘ν νΈλμμ
μ λ€λ£¨κ±°λ μ¬λ¬ λ¨κ³μ μ°μ°μ΄ νμν κ²½μ°,
μ¬λ‘.
- API Rate Limiting β API μμ²μ νμ μ ν
- λμμ± μ μ΄ β νΉμ 리μμ€λ μμ μ λν΄ λμμ μ κ·Όν μ μλ ν΄λΌμ΄μΈνΈμ μ μ ν
- μ΄λ²€νΈ μΉ΄μ΄ν
β νΉμ μ΄λ²€νΈ λ°μ νμλ₯Ό μ€μκ°μΌλ‘ κΈ°λ‘ν΄μΌ ν κ²½μ°
- ex) κ΄κ³ ν΄λ¦ μ, μ’μμ μ, νμ΄μ§ λ·° μ λ±μ μ€μκ°μΌλ‘ μΉ΄μ΄ν νμ¬ μΆμ
- λΆμ° νκ²½μμμ μ€μ μ§μ€μ μΉ΄μ΄ν β μ¬λ¬ μλ²λ μ ν리μΌμ΄μ μΈμ€ν΄μ€μμ κ³΅ν΅ μΉ΄μ΄ν°λ₯Ό μ μ§ν κ²½μ°
.
.
π οΈ μ±λ₯ ν μ€νΈ.
- νμ μλ: 50,000
- User: 296
- Processes: 8
- Threads: 37
- Duration: 3 min (01:40 μ€λ¨)
κ²°κ³Όλ₯Ό 보면 μ ννκ² 50,000 κ±΄λ§ μ±κ³΅μΌλ‘ μ²λ¦¬λ κ²μ λ³Ό μ μλ€.
Redis key λ 82,720 μΈλ° 50,000(Successful) + 32,720(Errors) = 82,720 λ‘ μ ννκ² μ μ₯λμλ€.
00:36 μ΄νμλ λͺ¨λ μλμ΄ 0μΌλ‘ μ‘°νλμ΄, μ¬κ³ λΆμ‘± μ€λ₯κ° λ°μνκ² λλ€.
πΉ Redis Lettuce Lock
Redisμ λͺ λ Ήμ΄μ κΈ°λ₯μ νμ©νμ¬ λ½μ ꡬννλ λ°©λ²
μ£Όλ‘SET
λͺ λ Ήμ΄μ TTL(Time-To-Live)μ μ¬μ©νμ¬ νΉμ 리μμ€μ λν μ κΈμ κ΄λ¦¬
μ μ.
- Lettuceλ₯Ό μ¬μ©ν΄ Redisμμ λΆμ° λ½(Distributed Lock)μ ꡬν κ°λ₯
- MySQLμ Named Lockκ³Ό μ μ¬ν λ°©μ
setnx
(set if not exist) λͺ λ Ήμ΄λ₯Ό νμ©νμ¬ λΆμ°λ½ ꡬνSpin Lock
λ°©μ- λ½μ νλνλ €λ μ€λ λκ° λ½μ μ¬μ©ν μ μλμ§ λ°λ³΅μ μΌλ‘ νμΈνλ©΄μ λ½ νλμ μλνλ λ°©μ
- μ¬μλ λ‘μ§ κ°λ° νμ
λμ λ°©μ.
- λ½ νλ
- νΉμ ν€λ₯Ό μμ±νκ³
SET
λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μ΄ ν€μ κ°κ³Ό TTLμ μ€μ - μ΄λ
NX
(Keyκ° μ‘΄μ¬νμ§ μμ λλ§ μ€μ ) μ΅μ κ³ΌEX
(ν€μ λ§λ£ μκ°μ μ΄ λ¨μλ‘ μ€μ ) μ΅μ μ ν¨κ» μ¬μ© - λ½μ μ±κ³΅μ μΌλ‘ νλνλ©΄
OK
λ₯Ό λ°ννκ³ , λ€λ₯Έ νλ‘μΈμ€λ λ½μ νλ μ€ν¨
- νΉμ ν€λ₯Ό μμ±νκ³
- λ½ ν΄μ
- μμ μ΄ μλ£λλ©΄ λ½μ ν΄μ νκΈ° μν΄ ν΄λΉ ν€λ₯Ό μμ
- μ΄ κ³Όμ μμ ν€κ° μ€μ λ‘ μ κΈμ νλν νλ‘μΈμ€μ μν΄ μμ λλμ§ νμΈνλ λ‘μ§μ΄ νμν μ μμ
- μλ ν΄μ
- TTLμ μ€μ ν΄ λλ©΄ μ§μ λ μκ°μ΄ μ§λλ©΄ λ½μ΄ μλμΌλ‘ ν΄μ
- νλ‘μΈμ€κ° μκΈ°μΉ μκ² μ’ λ£λλ μν©μμλ μμ€ν μ΄ λ¬΄νμ λκΈ°νλ κ²μ λ°©μ§
μ₯μ .
κ°λ¨ν ꡬν
- Redisμ κΈ°λ³Έ λͺ λ Ήμ΄λ§μΌλ‘ κ°λ¨νκ² λΆμ° λ½μ ꡬν κ°λ₯
- 볡μ‘ν μ€μ μ΄λ μΈλΆ λΌμ΄λΈλ¬λ¦¬ μμ΄λ ν¨μ¨μ μΈ λ½ λ©μ»€λμ¦μ ꡬμΆ
- (spring data redis μ¬μ© μ κΈ°λ³Έμ μΌλ‘ Lettuce μ μ©)
λΉλκΈ° μ²λ¦¬
- λΉλκΈ° λ° λ°μν νλ‘κ·Έλλ° λͺ¨λΈμ μ§μ
- λμ μ±λ₯κ³Ό λΉλκΈ° μ²λ¦¬κ° μꡬλλ μμ€ν μμ ν¨μ¨μ μΌλ‘ μλ
TTLμ ν΅ν μλ ν΄μ
- TTL μ€μ μ ν΅ν΄ μ κΈμ μλμΌλ‘ ν΄μ
- μκΈ°μΉ μμ μ€λ₯λ νλ‘μΈμ€ μ’ λ£λ‘ μΈν μ κΈ ν΄μ λ₯Ό μ κ²½ μΈ νμκ° μμ
νμ₯μ±
- Lettuce Lockμ Redisλ₯Ό κΈ°λ°μΌλ‘ νκΈ° λλ¬Έμ, λΆμ° μμ€ν μμ μμ½κ² νμ₯ κ°λ₯
- μ¬λ¬ μΈμ€ν΄μ€κ° λμΌν Redis μλ²λ₯Ό ν΅ν΄ λ½μ 곡μ κ°λ₯
λ¨μ .
Spin Lock λ°©μ
- λμμ λ§μ μ€λ λκ° λ½ νλ λκΈ° μνλΌλ©΄ λ λμ€μ λΆνκ° κ° μ μμ
- λ½ νλ μ¬μλ κ° λκΈ° μκ°λ νμ
λΆμ° λ½μ μ λ’°μ± λ¬Έμ
- Redisλ κΈ°λ³Έμ μΌλ‘ λ¨μΌ λ Έλμμ μλ
- Redis μλ²μ μ₯μ κ° λ°μνκ±°λ λ€νΈμν¬ λΆν (Partitioning)μ΄ μΌμ΄λλ©΄ λ½μ΄ ν΄μ λμ§ μκ±°λ, μλͺ»λ νλ‘μΈμ€μ μν΄ λ½μ΄ ν΄μ λ κ°λ₯μ±μ΄ μ‘΄μ¬
λ½ ν΄μ κ²½μ 쑰건
- νλ‘μΈμ€κ° λ½μ ν΄μ ν λ, λ€λ₯Έ νλ‘μΈμ€κ° λμμ κ°μ ν€μ λν΄ λ½μ νλνλ € ν κ²½μ° Race Condition λ°μ κ°λ₯μ± μ‘΄μ¬
- λ°©μ§λ₯Ό μν΄ λ½ ν΄μ μ κ³ μ ν μλ³μλ₯Ό νμΈνλ μΆκ°μ μΈ λ‘μ§μ΄ νμ
TTLμ νκ³
- TTLμ΄ μ§λλ©΄ μλμΌλ‘ λ½μ΄ ν΄μ λμ§λ§, μμ μ΄ μμλ³΄λ€ μ€λ 걸릴 κ²½μ° λ½μ΄ μΌμ° ν΄μ λ μνμ΄ μ‘΄μ¬
- μ΄λ‘ μΈν΄ λ νλ‘μΈμ€κ° λμμ κ°μ 리μμ€μ μ κ·Όνκ² λ μ μμ
λ€νΈμν¬ μ§μ° λ¬Έμ
- λΆμ° νκ²½μμ λ€νΈμν¬ μ§μ°μΌλ‘ μΈν΄ λ½μ΄ μμμ μ νκ² ν΄μ λμ§ μκ±°λ, λ°λλ‘ μ΄λ―Έ ν΄μ λ λ½μ΄ μμ§ ν΄μ λμ§ μμ κ²μΌλ‘ μΈμλ μ μμ β μ μ¬μ μΌλ‘ λ°μ΄ν° μΌκ΄μ± λ¬Έμ λ₯Ό μ΄λ
μ¬λ‘.
- λΆμ° μμ€ν
μμμ 리μμ€ λκΈ°ν
- μ¬λ¬ μλ²λ μ ν리μΌμ΄μ μΈμ€ν΄μ€μμ λμΌν 리μμ€(ex. νμΌ, λ°μ΄ν°λ² μ΄μ€ λ μ½λ)μ μ κ·Όν λ, Lettuce Lockμ μ¬μ©νμ¬ λμ μ κ·Όμ μ μ΄
- μλ² κ° μμ
μ‘°μ
- λΆμ° νκ²½μμ μλ² κ°μ μμ μ μ‘°μ νκ±°λ νΉμ μμ μ λ¨μΌ μλ²μμλ§ μνλλλ‘ λ³΄μ₯ν λ μ μ©
- ex) λ°°μΉ μμ μ΄λ ν¬λ‘ μμ μ μ€λ³΅ μ€νμ λ°©μ§νκΈ° μν΄ μ¬μ©
- API Rate Limiting
- νΉμ μ¬μ©μκ° μΌμ κΈ°κ° λ΄μ APIλ₯Ό μΌμ νμ μ΄μ νΈμΆνμ§ λͺ»νλλ‘ μ νν λ, Redisμ TTLμ νμ©ν Lettuce Lock λ°©μμΌλ‘ Rate Limitingμ ꡬν
- μΌνμ± μμ
보μ₯
- νΉμ μ΄λ²€νΈλ μμ μ΄ ν λ²λ§ μ€νλμ΄μΌ νλ κ²½μ°, Lettuce Lockμ μ¬μ©νμ¬ λμΌν μ΄λ²€νΈκ° μ€λ³΅ μ²λ¦¬λμ§ μλλ‘ μ ν
- ex) μ΄λ©μΌ λ°μ‘, νΈλμμ μ²λ¦¬ λ±μμ μ¬μ©
.
.
π οΈ μ±λ₯ ν μ€νΈ.
- νμ μλ: 50,000
- User: 296
- Processes: 8
- Threads: 37
- Duration: 3 min
λμμ λ§μ μ€λ λκ° λ½ νλ λκΈ° μνμμ λ°λ³΅μ μΌλ‘ λ½ νλ νμΈμ νλ€ λ³΄λ
CPU μ¬μ©λμ΄ λκ² λμλμ§ μ±λ₯μ΄ μ’μ§ μμλ€.
λμΌν 쑰건μΌλ‘ 31,380 건λ°μ μ²λ¦¬λ₯Ό λͺ» νμλ€.κ·Έλλ λμμ± μ²λ¦¬κ° μ λκ³ μλμ§ νμΈμ ν΄μΌ νλ νμ μλμ 10,000 μΌλ‘ μ€μ¬μ νμΈμ λ°λ‘ ν΄λ³΄μλλ° λ¬Έμ λ μμλ€.
πΉ Redis Redisson Lock
pub-sub
κΈ°λ°μΌλ‘ Lock ꡬν μ 곡
μ μ.
- μ±λμ λ§λ€κ³ λ½μ μ μ μ€μΈ μ€λ λκ° λ½ νλμ λκΈ° μ€μΈ μ€λ λμκ² λ½ ν΄μ λΌλ λ©μμ§λ₯Ό μ μ‘
- λ©μμ§λ₯Ό μ λ¬λ°μ μ€λ λκ° λ½ νλμ μλνλ λ°©μ
- λ½ νλμ μν΄ λ°λ³΅μ μΌλ‘ λ½ νλμ μλνλ Lettuce λλΉ λΆνλ₯Ό μ€μΌ μ μμ
λμ λ°©μ.
- λ½ νλ
- ν΄λΌμ΄μΈνΈκ°
lock()
λ©μλλ₯Ό νΈμΆνλ©΄, Redissonμ Redisμ λ½μ μ€μ νλ λͺ λ Ήμ΄λ₯Ό μ μ‘ - μ΄λ λ½μ λ§λ£ μκ°(TTL)μ΄ μ€μ λμ΄, μ€μ λ μκ°μ΄ μ§λλ©΄ λ½μ΄ μλμΌλ‘ ν΄μ
- ν΄λΌμ΄μΈνΈκ°
- λ½ ν΄μ
- μμ
μ΄ μλ£λλ©΄
unlock()
λ©μλλ₯Ό νΈμΆνμ¬ λ½μ ν΄μ - μ΄ κ³Όμ μμ λ½μ΄ μ€μ λ‘ ν΄λΉ ν΄λΌμ΄μΈνΈμ μν΄ μ€μ λ κ²μΈμ§ νμΈνμ¬, λ€λ₯Έ ν΄λΌμ΄μΈνΈκ° μλͺ»λ λ½ ν΄μ λ₯Ό νμ§ μλλ‘ λ³΄νΈ
- μμ
μ΄ μλ£λλ©΄
- μλ μ°μ₯
- Redissonμ λ½μ΄ μ€μ λ λμ μ£ΌκΈ°μ μΌλ‘ λ§λ£ μκ°μ μ°μ₯νλ κΈ°λ₯μ μ 곡
- μμ μ΄ μμλ³΄λ€ μ€λ 걸리λ κ²½μ°μλ λ½μ΄ μ μ§λλλ‘ μ§μ
μ₯μ .
pub-sub κΈ°λ° κ΅¬ν
- Lettuce Lock λλΉ λ λμ€μ μ μ λΆν
- λ½ νλ μ¬μλλ₯Ό κΈ°λ³Έμ μΌλ‘ μ 곡
κ³ κ°μ©μ±
- Redis ν΄λ¬μ€ν° νκ²½μ μ§μ
- κ³ κ°μ©μ±μ μν΄ μ¬λ¬ λ Έλμ λΆμ°λ Redis μΈμ€ν΄μ€λ₯Ό μ¬μ© κ°λ₯
- λ¨μΌ λ Έλ μ₯μ μμλ λ½μ΄ μμ μ μΌλ‘ μ μ§
μλ μ°μ₯ κΈ°λ₯
- Watchdog κΈ°λ₯μ ν΅ν΄ λ½μ λ§λ£ μκ°μ μλμΌλ‘ μ°μ₯
- κΈ΄ μμ μ μνν λ λ½μ΄ μλμΉ μκ² ν΄μ λλ κ²μ λ°©μ§
λ€μν λ½ μ ν μ§μ
- κΈ°λ³Έμ μΈ λ½λΏλ§ μλλΌ, μ¬μ§μ λ½(Reentrant Lock), 곡μ λ½(Fair Lock), μ½κΈ°-μ°κΈ° λ½(ReadWrite Lock) λ± λ€μν λ½ μ νμ μ§μ
νΈλ¦¬ν API
- κ°λ¨νκ³ μ§κ΄μ μΈ APIλ₯Ό μ 곡νμ¬, 볡μ‘ν λΆμ° λ½ λ‘μ§μ μ½κ² ꡬν
λΆμ° λ½ κ΄λ¦¬
- λΆμ° λ½μ κ΄λ¦¬νκΈ° μν λ€μν λꡬμ κΈ°λ₯μ μ 곡νμ¬, λΆμ° νκ²½μμ λμμ±μ ν¨κ³Όμ μΌλ‘ μ μ΄
λ¨μ .
볡μ‘μ±
- ν¨κ³Όμ μΌλ‘ μ¬μ©νκΈ° μν΄μλ μ€μ κ³Ό μ¬μ©λ²μ λν κΉμ μ΄ν΄κ° νμ + λ³λμ λΌμ΄λΈλ¬λ¦¬ νμ
- νΉν Redis ν΄λ¬μ€ν° νκ²½μμμ μ€μ μ 볡μ‘
λ€νΈμν¬ μ§μ° λ° μ₯μ
- λΆμ° λ½μ λ€νΈμν¬ μ§μ°μ΄λ Redis λ Έλ μ₯μ λ‘ μΈν΄ μ±λ₯ μ ν λλ μ κΈ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ
- μ΄λ¬ν λ¬Έμ λ₯Ό μ΅μννκΈ° μν΄ μ€κ³λμμ§λ§, μμ ν λ°©μ§ν μλ μμ
μ€λ²ν€λ
- μλ μ°μ₯ κΈ°λ₯κ³Ό κ³ κ°μ©μ± μ§μ κΈ°λ₯μ μΆκ°μ μΈ μ€λ²ν€λλ₯Ό λ°μμν¬ μ μμ
- λ§€μ° λμ μ±λ₯μ΄ μꡬλλ μμ€ν μμλ μ£Όμ νμ
λ°μ΄ν° μ μ€ κ°λ₯μ±
- λΆμ° λ½μ μ λ³΄κ° Redisμ μ₯μ λ μ¬μμμΌλ‘ μΈν΄ μ μ€λ κ°λ₯μ±μ΄ μ‘΄μ¬
- μ΄λ₯Ό λ°©μ§νκΈ° μν΄ μΆκ°μ μΈ λ°μ΄ν° μ§μμ± μ€μ μ΄ νμ
μ¬λ‘.
- λΆμ° νΈλμμ
κ΄λ¦¬
- λΆμ° μμ€ν μμ νΈλμμ μ μμ νκ² κ΄λ¦¬νλ λ° μ μ©
- ex) μ¬λ¬ λ§μ΄ν¬λ‘μλΉμ€κ° λμΌν λ°μ΄ν°λ² μ΄μ€λ 리μμ€μ μ κ·Όν λ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νλ λ° μ¬μ©
- λμ μμ
μ ν
- μ¬λ¬ μλ²μμ λμμ μ€νλλ μμ μ μλ₯Ό μ νν΄μΌ ν λ μ¬μ©
- ex) λΆμ°λ μΉ μλ²κ° λμΌν νμΌμ λμμ μμ νμ§ λͺ»νκ² νκ±°λ, λμΌν μΈλΆ APIμ λν λμ μμ² μλ₯Ό μ ννλ λ° νμ©
- μ¬μ§μ
λ½ νμμ
- λμΌν ν΄λΌμ΄μΈνΈμμ λ½μ μ¬λ¬ λ² νλνκ³ ν΄μ ν νμκ° μλ κ²½μ°, Redissonμ μ¬μ§μ λ½ κΈ°λ₯μ ν΅ν΄ μ΄ μμ μ μμ νκ² μ²λ¦¬
- 볡μ‘ν λκΈ°ν λ‘μ§
- μ½κΈ°-μ°κΈ° λ½, 곡μ λ½ λ± λ³΅μ‘ν λκΈ°ν μꡬ μ¬νμ΄ μλ κ²½μ° μλλ¦¬μ€ κ΅¬ν κ°λ₯
μ€λ¬΄μμλ 보ν΅
μ¬μλκ° νμνμ§ μμ λ½μ Lettuceλ₯Ό νμ©νκ³ ,
μ¬μλκ° νμν κ²½μ° Redissonμ νμ©
μ°Έκ³ .
- Redisson trylock() λ΄λΆλ‘μ§ μ΄ν΄λ³΄κΈ°
- λ λμ€κ° μ 곡νλ λΆμ°λ½(RedLock)μ νΉμ§κ³Ό νκ³
.
.
π οΈ μ±λ₯ ν μ€νΈ.
- νμ μλ: 50,000
- User: 296
- Processes: 8
- Threads: 37
- Duration: 3 min
Lettuce μ Spin Lock λ°©μ λν λ¨μ μ ν΄κ²°νκΈ° μν μ°¨μ μ± μΌλ‘ Redisson μ΄ μ¬μ©λλλ°,
Redisson μμλ lua scriptμ μΈλ§ν¬μ΄κ° μ¬μ©λ λ€κ³€ νλ€.νκ²½μ λ°λΌ λ€λ₯Ό μ μμ§λ§ Redisson Lock λ°©μλ μ±λ₯μ΄ μ’μ§λ§μ μμλ€.
λμΌν 쑰건μΌλ‘ 28,816 건λ°μ μ²λ¦¬λ₯Ό λͺ» νμλ€. (Lettuce Lock λ³΄λ€ λ μ μ’μ μ±λ₯)κ·Έλλ λμμ± μ²λ¦¬κ° μ λκ³ μλμ§ νμΈμ ν΄μΌ νλ νμ μλμ 10,000 μΌλ‘ μ€μ¬μ νμΈμ λ°λ‘ ν΄λ³΄μλλ° λ¬Έμ λ μμλ€.