๐ฅ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค/Redis
[Redis] ch.1 ์์ํ๊ธฐ / ch.2 ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ฟผ๋ฆฌํ๋ ๋ช
๋ น์ด
by OR15A
2024. 1. 25.
https://github.com/HongHyeongJu/StudySpace/blob/main/database/Redis/Redis_%ED%95%99%EC%8A%B5%EB%85%B8%ED%8A%B8_01.md
์ ๋ฐ๋ฏธ Redis : ๊ฐ๋ฐ์๋ฅผ ์ํ Redis ์๋ฒฝ ๊ฐ์ด๋
ch.01 - ์์ํ๊ธฐ && ch.02 - ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ฟผ๋ฆฌํ๋ ๋ช
๋ น์ด
Redis๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ง๋ฅด๊ฒ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ฌ ์ ์์
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ๋จ์ํ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํจ : ๋ฐ์ดํฐ๊ฐ HashMap, List ๋ฑ๊ณผ ๊ฐ์ ๊ณ ์ ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋จ
- ์๋์ ์ผ๋ก ์์ฃผ ๋จ์ํ ๊ธฐ๋ฅ๋ง ๊ฐ์ถ๊ณ ์์
์ด๊ธฐ์ค์
- https://redis.com/
- ํ์๊ฐ์
- ๋ฌด๋ฃ free ํ๋ ์์ฑ + DB์์ฑ
- Redis ๋ช
๋ น์ด ์คํ ๋ฐฉ๋ฒ
- rbook.cloud ์ด์ฉํ๊ธฐ
- rbook์ ๋ก์ปฌ์์ ์ฌ์ฉํ๊ธฐ
- Redis-CLI ์ฌ์ฉํ๊ธฐ
๊ธฐ๋ณธ ๋ช
๋ น์ด
- ๋ช
๋ น์ด : ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ดํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์กํ๋ ๋ฌธ์์ด
- SET, GET ๋ค์์ ๋จ์ด๋ฅผ ket๋ ๋ณ์๋ช
์ผ๋ก ์ ์ฅํจ
SET message 'Hi there!'
key: message / value : 'Hi there!'
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํ์
: String, List, Hash, Set, Sorted Set, Bitmap, Hyperloglog, Json, Index
- ๊ฐ ๋ช
๋ น์ด ์ ์ฌํ ๊ฒ์ ๋ฌถ์ด์ ์ดํดํ๋ฉด ์ข์ (๋ธ๋ก๊ทธ์ ํ๋ก ์ ๋ฆฌํ๊ธฐ)
- ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ณต์๋ฌธ์ redis.io/commands
- ๊ณต์๋ฌธ์ ์ดํดํ๊ธฐ
- Filter by group์ผ๋ก ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ฐ์ดํฐํ์
์ ํํ๊ธฐ
- ๋ช
๋ น์ด ์ ํํ๊ธฐ
- ํค๋ฉ ํ
์คํธ ์ดํดํ๊ธฐ
๋ฌธ์์ด ๊ธฐ๋ณธ ๋ช
๋ น์ด
- ex) SET key value
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
- ๋๋ฌธ์ : ๋ช
๋ น์ด
- ์๋ฌธ์ : ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๊ฐ
- ๋๊ดํธ ์์ ๋จ์ด : ์ ํ์ฌํญ, ์ ํ์ ์ธ ์ธํ -> ๊ณต์๋ฌธ์ ์ฐธ๊ณ
- ๊ธฐํธ | : OR์ ์๋ฏธ
- SET ๋ณํ ๋ช
๋ น์ด
- SET + key + value + ํค๋ฅผ ์ค์ ํ ์กฐ๊ฑด ๋ช
์ + ํค๋ฅผ ์ค์ ํ์ ๋ ์ด์ ์ ์ ์ฅ๋์ด ์๋ ๊ฐ ๋ฐํ + ๋ง๋ฃ์๊ฐ
- SET + key + value + [NX | XX] + [GET] + ๋ง๋ฃ์๊ฐ
- ์ค๊ฐ์ ๊ณต๋ฐฑ์๋ ๋ฌธ์์ด ์ ์ฅ์ ""๋ก ๊ฐ์ธ๊ธฐ
ํค ์ค์ ์กฐ๊ฑด
- [NX | XX]
- NX (Not eXists)
- ํด๋น ํค๊ฐ ์กด์ฌํ์ง ์์ ๋๋ง ๊ฐ์ ์ค์
- ์ด๋ฏธ ํค๊ฐ ์กด์ฌํ๋ฉด ๋ช
๋ น์ด๋ ์๋ฌด๋ฐ ๋์์ ํ์ง ์์
- XX (eXists)
- ํด๋น ํค๊ฐ ์ด๋ฏธ ์กด์ฌํ ๋๋ง ๊ฐ์ ์ค์
- ํค๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ๋ช
๋ น์ด๋ ์๋ฌด๋ฐ ๋์์ ํ์ง ์์
๋ง๋ฃ ์ต์
์ฌ์ฉ ์ฌ๋ก
- [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
- Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ๋ง๋ฃ๋์ด ์๋์ผ๋ก ์ญ์ ๋ ์ง ์ฌ๋ถ ๊ฒฐ์ ํ๋ ์ ํ์ ์ธ์
- EX (EXpire)
- ์ค์ ๋ ์๊ฐ(์ด ๋จ์) ํ์ ํค๊ฐ ๋ง๋ฃ๋๋๋ก ํจ
- ์ด ์ต์
์ ์ฌ์ฉํ๋ฉด ํค์ ๋ํ ๊ฐ์ด ์๋์ผ๋ก ์ญ์ ๋จ
- PX (Pexpire)
- EX์ ์ ์ฌํ์ง๋ง, ์๊ฐ ๋จ์๊ฐ ๋ฐ๋ฆฌ์ด
- EXAT
- ํค๊ฐ ๋ง๋ฃ๋ UNIX ์๊ฐ(์ด ๋จ์)์ ์ง์
- ์ด ์๊ฐ์ ๋๋ฌํ๋ฉด ํค๋ ์๋์ผ๋ก ์ญ์ ๋จ
- PXAT
- EXAT์ ์ ์ฌํ์ง๋ง, ์๊ฐ ๋จ์๊ฐ ๋ฐ๋ฆฌ์ด
- KEEPTTL (KEEP Time To Live)
- ์ด ์ต์
์ ์ฌ์ฉํ๋ฉด ํ์ฌ ํค์ TTL(Time To Live, ๋ง๋ฃ ์๊ฐ)์ ์ ์ง
- ํค์ ์ ๊ฐ์ ์ค์ ํ ๋ ๊ธฐ์กด์ ๋ง๋ฃ ์๊ฐ์ ๊ทธ๋๋ก ์ ์งํ๊ณ ์ถ์ ๋ ์ ์ฉํจ
- ๋ง๋ฃ์๊ฐ ์ฌ์ฉ ์ด์
- Redis์ ๊ทผ๋ณธ์ ์ธ ์ฉ๋ : Redis๋ ๋ณธ๋ ์บ์ฑ ์๋ฒ๋ก ์ค๊ณ๋์์ (ํน์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๊ธฐ๊ฐ ๋์ ์ ์ฅํ ๋ค์ ํ์ํ์ง ์๊ฒ ๋๋ฉด ์ญ์ )
- Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์บ์ฑํ ๊ฐ์ด๋ฏ๋ก ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด ์๋์ผ๋ก ์ญ์ ํ๋ ๊ฒ
- Redis์ ๊ทผ๋ณธ์ ์ธ ์ฉ๋๊ฐ ์บ์ฑ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํด ์ ์งํ๋ ๊ฒ์ ๋ง๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ์ง ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ
- Redis์ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ค์ํ ์ฐฝ์์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ง๋ง ๋ํ์ ์ธ ์ด์ ๋ ์บ์ฑ
SETEX, SETNX, MSET, MSETNX
- SETEX = SET + EX
- SETNX = SET + NX
- MSET
- ์ฌ๋ฌ ํค ์ ์ ์ฅ ๋์ ๊ฑฐ์ฅ ๊ฐ๋ฅํจ
- SET์ ๋ฐ๋ณตํด์ ํธ์ถํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ธฐ๋ฅ
MSET color red onekey twokey
-> ๊บผ๋ด๊ธฐ GET onekey
=> red, GET twokey
=> red
- MSETNX = MSET + NX
GET๊ณผ MGET
- GET + ๊ฐ์ ธ์ฌ ํค์ ์ด๋ฆ
- MGET : ํ๋์ ๋ช
๋ น์ด์์ ์ฌ๋ฌ ํค์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์
MSET onekey twokey
-> "red", "red"
๋ฌธ์์ด ๋ฒ์
- DEL
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ ํค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํจ
- ๋ฌธ์์ด ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์๋ฃํ์ ์ฌ์ฉํ ์ ์์
- GETRANGE
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด ์กด์ฌํ๋ ๋ฌธ์์ด์์ ํน์ ๋ฒ์์ ๋ฌธ์๋ง ๊ฐ์ ธ์ฌ ์ ์์
- ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์
- model์ 'black'์ด ์ ์ฅ๋์ด ์์ ๋ :
GETRANGE model 0 2
=> "bla"
- SETRANGE
- GETRANGE์ ๋ฐ๋
- ๊ธฐ์กด ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ์
๋ฐ์ดํธํ ์ ์์
- model์ 'black'์ด ์ ์ฅ๋์ด ์์ ๋ :
SETRANGE model 2 ooo
=> ์ธ๋ฑ์ค 2๋ถํฐ ๋์ฒดํจ "blooo"
๋ช
๋ น์ด ์์ฉํ๊ธฐ
- ์์
- ์์ฃผ์ฐ๋ ๊ฐ๊ตฌ Map data๊ฐ ์์ ๋ => ๊ฐ๊ตฌ ์ ํ์ ๋ชฉ๋ก์ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์
์ผ๋ก ๋ณํํ๋ ๊ฒ
- (๋ฌธ์์ด ์ ์ฒด๋ฅผ ์ ์ฅํ๋ ๋์ ๊ฐ๋จํ ๊ฐ๋ง ์ธ์ฝ๋ฉ)
- ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ๊ฐ์ง ์์ฑ์ ์ธ์ฝ๋ฉํ ๋ฌธ์๋ฅผ ํฉ์ณ์ ๋ฌธ์์ด๋ก ์ ์ฅ => item1 : aqg / item2 : qop / item3 : cir
- ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ์์ถํด ๋จ์ผ ๋ฌธ์๋ก ๊ฐ์ ์ธ์ฝ๋ฉ ํ ์ ์์!!
์ซ์ ๋ค๋ฃจ๊ธฐ
- ๋ฌธ์์ด์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ ๋ช
๋ น์ด๋ฅผ ์ซ์๋ฅผ ์ค์ ํ๊ณ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉํ ์ ์์
- SET, GET, MGET, MSET ๋ฑ์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๊ณ SET ๋ช
๋ น์ด์ ์ต์
๋ ๋์ผํ๊ฒ ์ ์ฉ
- ์ซ์๋ฅผ ๋ค๋ฃฐ ๋๋ ์ซ์๋ง์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ถ๊ฐ ๋ช
๋ น์ด ์์
- DECR, DECRBY, INCRBY, INCR, INCRBYFLOAT
- ๋ฌธ์์ด ํค์ ์ฌ์ฉ X => ์ฌ์ฉ ์ Redis๊ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฐํํจ
- INCR
- ๊ธฐ์กด์ ์ซ์์ 1 ๋ํจ
SET age 20
-> INCR age
-> 21
- DECR
- ๊ธฐ์กด์ ์ซ์์์ 1 ๋บ
SET age 20
-> DECR age
-> 19
- INCRBY
- ๊ธฐ์กด์ ์ซ์์ ๋ํจ (๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ 1)
SET age 20
-> INCRBY age 20
-> 40
- DECRBY
- ๊ธฐ์กด์ ์ซ์์์ ๋บ (๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ 1)
SET age 20
-> DECRBY age 10
-> 10
- INCRBYFLOAT
- ์์์ ์ด ์๋ ํ๋กํธ ๊ฐ์ ์ฒ๋ฆฌ
- INCRBYFLOAT์ ํค ์ด๋ฆ๊ณผ ํจ๊ป ์์์ ์ด ์๋ ์ซ์๋ฅผ ์ ๋ฌ
- ๋บ์ ํ๋ ค๋ฉด ์์๋ฅผ ์ ๋ฌํ๊ธฐ
SET age 20
-> INCRBYFLOAT age 6.400145
SET age 20
-> INCRBYFLOAT age -6.400145
์ซ์ ๋ช
๋ น์ด์ ์กด์ฌ ์ด์
- INCR ๋ช
๋ น์ด
- [1] ๊ฐ์ ํ์ธ
- [2] ๊ฐ์ ์์ ํ๊ณ ๋ค์ ์ ์ฅ
- ex) ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ, ์ด๋ฏธ์ง ๋๋ ๋๊ธ์ ์ถ์ฒ ์ ์ฆ๊ฐ
- GET, SET์ ์ด์ฉํ๋ ๊ฒฝ์ฐ์ ๋จ์
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ 2๋ฒ ์ ๊ทผํด์ผ ํจ(API์๋ฒ์์ Redis์ ์์ฒญ์ 2๋ฒ ํด์ผํจ)
- ํน์ ๊ฒ์๋ฌผ์ ์ถ์ฒํ๋ ์์ฒญ์ด API ์๋ฒ์ ๋์์ ๋ค์ด์์ ๊ฒฝ์ฐ(์์ฒญ๋ ์์ ์์ฒญ์ด ๋ค์ด์ค๋ ๊ฐ๋์ ๊ฒฝ์ฐ) ์๋ชป๋ ์๋ฐ์ดํธ ๋ ์ ์์
- ์ ๊ฒฝ์ฐ์ ํด๊ฒฐ๋ฐฉ๋ฒ 3๊ฐ์ง
- ํน์ํ ๋ช
๋ น์ด์ธ Watch๋ฅผ ํตํ Redis ํธ๋์ญ์
์ ์ฌ์ฉํ๊ธฐ
- ๋ฝ์ ์ฌ์ฉํ๊ธฐ
- INCR ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ(ํ๊ฐ์ง ๋ช
๋ น์ด ์ฌ์ฉ)
- ์ค์
- Redis๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์์ผ๋ก ์๋ํ๋ฉฐ ๋ค์ํ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ๋ ๋์์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ ๊ธฐ์ตํ๊ธฐ!!
- ์ฌ๋ฌ API์์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ํญ์ ๋์์ฑ์ ๋ํด ์๊ฐํด์ผํจ