Redis Persistence

Redisμ—μ„œ 데이터λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” 방법

Redis Persistence

RedisλŠ” λΉ λ₯Έ μ„±λŠ₯으둜 유λͺ…ν•œ 인메λͺ¨λ¦¬ 데이터 μ €μž₯μ†Œμ΄μ§€λ§Œ, μ•„λž˜μ™€ 같은 νŠΉμ„±μ΄ μ‘΄μž¬ν•œλ‹€.

  • μ„œλ²„ μž¬μ‹œμž‘ μ‹œ λͺ¨λ“  데이터 μœ μ‹€

  • 볡제 κΈ°λŠ₯을 μ‚¬μš©ν•΄λ„ μ‚¬λžŒμ˜ μ‹€μˆ˜κ°€ λ°œμƒν•˜λ©΄ 데이터 볡원 λΆˆκ°€λŠ₯

  • μΊμ‹œ μ΄μ™Έμ˜ μš©λ„λ‘œ μ‚¬μš© μ‹œ μ μ ˆν•œ 데이터 백업이 ν•„μš”

λ”°λΌμ„œ 데이터 손싀을 λ°©μ§€ν•˜κΈ° μœ„ν•œ κ°•λ ₯ν•œ μ˜μ†μ„± μ˜΅μ…˜λ„ μ œκ³΅ν•œλ‹€.

Persistence Option

RedisλŠ” 데이터λ₯Ό 영ꡬ적으둜 μ €μž₯ν•˜κΈ° μœ„ν•œ 두 κ°€μ§€(AOF, RDB) 방식을 μ œκ³΅ν•œλ‹€.

1. AOF(Append Only File)

AOFλŠ” Redis의 데이터λ₯Ό λ³€κ²½ν•˜λŠ” λͺ¨λ“  λͺ…λ Ήμ–΄λ₯Ό 순차적으둜 μ €μž₯ν•˜λŠ” 방식이닀. 즉, 데이터λ₯Ό λ³€κ²½ν•˜λŠ” μ»€λ§¨λ“œκ°€ λ“€μ–΄μ˜€λ©΄ μ»€λ§¨λ“œλ₯Ό κ·ΈλŒ€λ‘œ μ €μž₯ν•œλ‹€.

예λ₯Ό λ“€μ–΄, key1의 값이 λ³€κ²½λ˜κ³  key2κ°€ μ‚­μ œ λ˜μ—ˆλ‹€λ©΄ ν•΄λ‹Ή μ»€λ§¨λ“œ 기둝이 λͺ¨λ‘ λ‚¨μ•„μžˆλ‹€.

μ£Όμš” νŠΉμ§•:

  • λͺ¨λ“  데이터 λ³€κ²½ λͺ…령이 κΈ°λ‘λ˜μ–΄, λ°μ΄ν„°μ˜ λ³€κ²½ 이λ ₯을 μ™„λ²½ν•˜κ²Œ 좔적할 수 μžˆλ‹€.

  • νŠΉμ • ν‚€μ˜ 값이 λ³€κ²½λ˜κ±°λ‚˜ μ‚­μ œλ˜λŠ” λͺ¨λ“  λͺ…령이 κ·ΈλŒ€λ‘œ 기둝되고 이처럼 λͺ…λ Ήμ–΄ 전체λ₯Ό κΈ°λ‘ν•˜κΈ° λ•Œλ¬Έμ— RDB 방식에 λΉ„ν•΄ 파일 크기가 크닀.

  • 파일 크기 관리λ₯Ό μœ„ν•΄μ„œλŠ” 주기적으둜 μ••μΆ•ν•˜μ—¬ μž¬μž‘μ„±(rewrite)ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€.

  • μ‹€μ œλ‘œ AOF νŒŒμΌμ€ Redis ν”„λ‘œν† μ½œ ν˜•μ‹μœΌλ‘œ μ €μž₯λ˜μ–΄ 일반적인 ν…μŠ€νŠΈλ‘œ 읽을 수 μ—†λ‹€.

AOF 생성 방법:

  1. μžλ™ 생성: redis.conf νŒŒμΌμ—μ„œ auto-aof-rewirte-percentage μ˜΅μ…˜μ„ 톡해 파일 크기 κΈ°μ€€μœΌλ‘œ μž¬μž‘μ„± μ‹œμ μ„ μ§€μ •ν•  수 μžˆλ‹€.

  2. μˆ˜λ™ 생성: BGREWRITEAOF λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ AOF νŒŒμΌμ„ μž¬μž‘μ„±ν•  수 μžˆλ‹€.

2. RDB(Redis Database)

RDBλŠ” νŠΉμ • μ‹œμ μ˜ λ©”λͺ¨λ¦¬ 데이터λ₯Ό μŠ€λƒ…μƒ· ν˜•νƒœλ‘œ μ €μž₯ν•˜λŠ” 방식이닀.

예λ₯Ό λ“€μ–΄, key1의 값이 λ³€κ²½λ˜κ³  key2의 데이터가 μ‚­μ œλ˜μ—ˆλ‹€λ©΄ key1의 λ³€κ²½ κ°’λ§Œ μ €μž₯λœλ‹€.

μ£Όμš” νŠΉμ§•:

  • μ €μž₯ μ‹œμ μ˜ λ©”λͺ¨λ¦¬ 데이터λ₯Ό λ°”μ΄λ„ˆλ¦¬ ν˜•νƒœλ‘œ μ €μž₯ν•œλ‹€.

  • μ—¬λŸ¬ 번의 데이터 변경이 μžˆλ”λΌλ„ μ΅œμ • μƒνƒœλ§Œμ„ μ €μž₯ν•œλ‹€.

  • AOF에 λΉ„ν•΄ 파일 크기가 μž‘κ³  λ‘œλ”© 속도가 λΉ λ₯΄λ‹€.

  • μŠ€λƒ…μƒ· 생성 μ‹œμ  μ‚¬μ΄μ˜ 데이터가 μœ μ‹€λ  수 μžˆλ‹€.

RDB 파일 생성 방법:

  1. μžλ™ 생성: redis.conf 파일의 SAVE μ˜΅μ…˜μ„ 톡해 μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ €μž₯ μ£ΌκΈ°λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

  2. μˆ˜λ™ 생성: BGSAVE λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ RDB νŒŒμΌμ„ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • SAVE λͺ…령어도 μ‘΄μž¬ν•˜μ§€λ§Œ, Redis μ„œλ²„λ₯Ό λΈ”λ‘œν‚Ήν•˜λ―€λ‘œ μ‹€μ œ 운영 ν™˜κ²½μ—μ„œλŠ” μ‚¬μš©μ„ (μ ˆλŒ€) ν”Όν•΄μ•Ό ν•œλ‹€.

AOF vs RDB 선택 κΈ°μ€€

λ§Œμ•½ Redisλ₯Ό λ‹¨μˆœ μΊμ‹œλ‘œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ μ˜μ†μ„± μ˜΅μ…˜λ“€μ„ ν•„μš”λ‘œ ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ 데이터 보쑴이 ν•„μš”ν•œ 경우 μ–΄λ–€ μ˜μ†μ„± μ˜΅μ…˜μ„ μ‚¬μš©ν•  μ§€ κ³ λ―Όν•΄ 봐야 ν•œλ‹€.

  1. 백업은 ν•„μš”ν•˜μ§€λ§Œ μ–΄λŠ μ •λ„μ˜ 데이터 손싀이 ν—ˆμš©λ˜λŠ” 경우

  • RDB만 λ‹¨λ…μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

  • redis.conf νŒŒμΌμ—μ„œ SAVE μ˜΅μ…˜μ„ μ μ ˆν•˜κ²Œ μ‚¬μš©ν•œλ‹€.

    • ex) save 900 1 섀정은 900초 λ™μ•ˆ μ΅œμ†Œ ν•œ 개 μ΄γ……γ…γ…‡μ˜ ν‚€ 변경이 μžˆμ„ λ•Œ RDB νŒŒμΌμ„ μž¬μž‘μ„±(생성) ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

  1. μž₯μ•  상황 μ§μ „κΉŒμ§€μ˜ 데이터λ₯Ό 보μž₯ν•΄μ•Ό ν•˜λŠ” 경우

  • AOF μ‚¬μš©. (appendonly yes)

  • appendsynce μ˜΅μ…˜μ΄ 기본값인 everysec일 경우 μ΅œλŒ€ 1초 μ‚¬μ΄μ˜ λ°μ΄ν„°λ§Œ 손싀 κ°€λŠ₯성이 μžˆλ‹€.

  1. 졜고 μˆ˜μ€€μ˜ 데이터 내ꡬ성이 ν•„μš”ν•œ 경우

  • Redis 곡식 λ¬Έμ„œμ—μ„œ ꢌμž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ, AOF와 RDBλ₯Ό λ™μ‹œμ— μ‚¬μš©

AOF의 appendfsync μ˜΅μ…˜μ—λŠ” always, everysec, no 섀정이 있으며 각각 데이터 μ•ˆμ •μ„±κ³Ό μ„±λŠ₯ μ‚¬μ΄μ˜ νŠΈλ ˆμ΄λ“œ μ˜€ν”„κ°€ μ‘΄μž¬ν•œλ‹€.

RDB 방식은 fork()λ₯Ό μƒ€μš©ν•˜μ—¬ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜λ―€λ‘œ, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μˆœκ°„μ μœΌλ‘œ 2λ°°κ°€ 될 수 μžˆλ‹€λŠ” 점을 κ³ λ €ν•΄μ•Ό ν•œλ‹€.

Last updated