๐ฅ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค/Redis
[Redis] ch.20 ๊ฒ์ ๊ตฌํํ๊ธฐ
by OR15A
2024. 1. 31.
https://github.com/HongHyeongJu/StudySpace/blob/main/database/Redis/Redis_%ED%95%99%EC%8A%B5%EB%85%B8%ED%8A%B8_07.md
์ ๋ฐ๋ฏธ Redis : ๊ฐ๋ฐ์๋ฅผ ์ํ Redis ์๋ฒฝ ๊ฐ์ด๋
ch.20 - ๊ฒ์ ๊ตฌํํ๊ธฐ
๊ฒ์๊ตฌํ
- ์ํฉ์ ๋ฐ๋ผ ์ ํํ๊ธฐ
- ํด์์ ์ด๋ค ํ๋์ ๋ํด์ ๊ฒ์์ ์คํํ ๊ฒ์ธ๊ฐ
- ํ ํ
์คํธ ๊ฒ์์ ์ํ๋ค๋ฉด ํ๋ํ์
์ ํ
์คํธ๋ก
- ์ค์ ๋ก ๊ทธ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ํจ์ ์์ฑํ๊ธฐ
- ์ธ๋ฑ์ค ์์ฑ ์์ ์ ๊ฒฐ์ ํ๊ธฐ
์ธ๋ฑ์ค ์์ฑ ํจ์
- ๊ฐ์๋ Node.js๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ํ์ํ ๋ถ๋ถ๋ง ํ๊ธฐ
- ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๋ ์ ๋์ด์ ์คํ์ ๋ฐฉ์ง๋ฅผ ์ํด์ ํจ์๋ฅผ ์ด์ฉํ๊ธฐ(์๋ฐ๋ ๋ฉ์๋๊ฒ ์ง)
- ex) public String itemsKey(Strting keyword){return "ietems#"+keyword; }
์ธ๋ฑ์ค ์์ฑ ์์
- ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ณ ์ฒ์์ผ๋ก Redis์ ์ ์ํ ๋ ์ฐ๋ฆฌ๋ Redis๋ฅผ ํ์ธํ๊ณ ์ด๋ฏธ ์กด์ฌํ๋ ๋ชจ๋ ์ธ๋ฑ์ค๋ก ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์๊ฒ์
- ์ดํ ๋ง๋ค๋ ค๋ ์ธ๋ฑ์ค๊ฐ ์ด๋ฏธ ์์ฑ๋์ด์๋์ง ํ์ธ
- ์์ฑX -> ๋ง๋ค๊ธฐ
- ์์ฑO -> ์๋ฌด๊ฒ๋ ์ํ๊ธฐ
FT._LIST
- ๋ชจ๋ ์ธ๋ฑ์ค๋ก ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ ๋ช
๋ น์ด
๊ฒ์์ด ํ์ฑํ๊ธฐ
- ๊ฐ์์์ ๊ตฌํํ ํจ์
- ๋งค๊ฐ๋ณ์ 2๊ฐ (์ฌ์ฉ์์ ์
๋ ฅ๊ฐ, ๋ฐํํ ์ต๋ ๊ฒ์๊ฒฐ๊ณผ ๊ฐ์)
- ์
๋ ฅ๊ฐ ์ ์ฒ๋ฆฌ
- ํน์๊ธฐํธ ์ญ์ ํ๊ธฐ : ์ ๊ท์ ์ด์ฉ,
- ์๋ ๊ณต๋ฐฑ์ ๊ฑฐ
- ์ค๊ฐ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋๊ธฐ
- ๊ณต๋ฐฑ ์ฌ์ด์ ๋จ์ด๊ฐ ์์ผ๋ฉด % ํผ์ผํธ ๊ธฐํธ ์ถ๊ฐํ๊ธฐ, ์์ผ๋ฉด ๋น๋ฌธ์์ด๋ก ์นํ
- AND์ฐ์ฐ ํ ๊ฒ์ธ์ง, OR์ฐ์ฐ ํ ๊ฒ์ธ์ง ์ ํ๊ธฐ
๊ฒ์ ์คํํ๊ธฐ
- ๊ฐ์์์ ๊ตฌํํ ํจ์ ํ๊ธฐ
- ์ ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ ํจํ์ง ํ์ธํ๊ธฐ
- ๊ธฐํธ์ ๊ฑฐ๋ก ์ธํด ๋น๋ฌธ์์ด์ด ๋๋ค๋ฉด DB์ ๋ชจ๋ ํญ๋ชฉ ๋ฆฌํด -> ์ ํจX
- ๋น๋ฌธ์๋ผ๋ฉด ๋น ๋ฐฐ์ด ๋ฆฌํดํ๊ธฐ == ์ฐพ์ ์ ์๋ค
- ์ค์ ๊ฒ์ ์ํํ๊ธฐ
- ์ญ์ง๋ ฌํ ํ๊ณ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๊ธฐ
๋ชจ์ ๋ฐ์ดํฐ ๋ณด์ถฉํ๊ธฐ
- ๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ๊ฒ์ ์์
์ต์ ํ ์์
์ ํจ์ฌ ์ํ ์ ์์
- ๊ทธ ์ดํ๋ก Node.js ์ค๋ช
RediSearch์ TF-IDF
- ๊ฒ์ ์ ์ค๋ช
์ด ์๋ ์ด๋ฆ์ ๊ฒ์์ด๊ฐ ์๋ ํญ๋ชฉ์ด ์ฐ์ ์๋๋๋ก ํ๊ธฐ
- RediSearch์ ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ์ดํดํ๋ฉด๋จ
- TF-IDF ์๊ณ ๋ฆฌ์ฆ
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ์ ๋ค์ํ ๋ฌธ์์ด๋ค์ ์ดํด๋ณด๊ณ ์ฃผ์ด์ง ๊ฒ์์ด์ ๋ํด ์ด๋ค ๊ฒ์ด ๊ด๋ จ๊น์์ง ๊ฒฐ์ ํ ์ ์์
- TF-IDF๋ ๊ฒ์์ด ๋น๋๋ฅผ ์ญ ๋ฌธ์ ๋น๋์ ๊ณฑํด์ ์๋ํจ
- ๊ณฑํ๋ฉด ๊ฐ๊ฐ์ ๋ฌธ์์ด์ ์ ์๊ฐ ๋งค๊ฒจ์ง๊ณ ์ ์๊ฐ ๋์ผ๋ฉด ๊ทธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ ๊ด๋ จ์ด ๊น๋ค๋๊ฑธ ์๋ฏธํจ
- ๊ฒ์์ด ๋น๋๋ ๋ฌธ์์ด ์์์ ์ด๋ค ๊ฒ์์ด๊ฐ ๋ช๋ฒ์ด๋ ๋ฑ์ฅํ๋์ง ํ์ธํ๊ณ ๊ทธ๊ฑธ ๋ฌธ์์ด ์์ ์ด ๋จ์ด ๊ฐ์๋ก ๋๋ ์ ๊ณ์ฐํ๋ ๋ฑ์ ๊ณ์ฐ ๋ฐฉ์์ด ์์
- ์๋ฅผ ๋ค์ด ๊ฒ์์ด๋ค ์ฌ์ด์ ๋จ์ด๊ฐ ๋ช ๊ฐ ์๋์ง, ํน์ ์ฐ๋ฆฌ๊ฐ ๊ฒ์ํ๋ ๋จ์ด๊ฐ ๋ฌธ์์ด์ ๋ช ๊ฐ ์๋์ง ๊ณ ๋ คํจ
- ๊ฐ๋ณ ๊ฒ์์ด/ํ๋์ ๊ฐ์ค์น๋ฅผ ์ถ๊ฐํ ์๋ ์์
ํ๋์ ๊ฐ์ค์น ์ ์ฉํ๊ธฐ
- ํ๋์ ๊ฐ์ค์น ์ ์ฉํ๊ธฐ ์ํด์ ์ฟผ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธ ํ๊ธฐ
- ์ด๋ฆ์ ๊ฒ์์ด 1๋ฒ < ์ค๋ช
์ ๊ฒ์์ด ๋ฐ๋ณต n๋ฒ : ๊ฒ์ ์๋์ ๋ง์ง ์์
- ex) ๊ฐ๋ณ ํด์์ nameํ๋๋ฅผ ๊ฒ์ํ๊ณ chair๋ฅผ ์ฐพ๊ณ , ์ฐพ์ผ๋ฉด 5๋ฐฐ์ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ๋ผ
- AND๋ OR๋ก ๋ณ๊ฒฝ
EXPLAINCLI๋ฅผ ์ด์ฉํ ์ฟผ๋ฆฌ
- EXPLAINCLI
- ์ค์ ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ง ์์ง๋ง ์ค์ ๋ก ์ด๋ป๊ฒ ์คํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋์ง์ ๊ด๋ ์ ๋ณด๋ฅผ ์ค ๊ฒ์(์ตํฐ๋ง์ด์ ์ ์คํ๊ณํ ๊ฐ์๊ฑด๊ฐ)
- ๊ฐ๋ฐ์์ ์ฟผ๋ฆฌ ์๋์ ๋ง๊ฒ ํด์๋๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉํจ
- +chair(expanded)์ ๊ฐ์ RediSearch์ ์คํ
๋ฐ์ ๊ณ ๋ คํด์ผํจ
- ๊ฐ ํญ์ ๊ดํธ๋ฅผ ์ถ๊ฐํด์ผํจ
- FT.EXPLAINCLI idx:items '(@name:(chair))|(@description:(chair))'
PROFILE๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ ํ์ธํ๊ธฐ
- FT.PROFILE
- ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๊ณ , Redis๋ ๋ด๋ถ์ ์ผ๋ก ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํจ
- ์ฟผ๋ฆฌ ๋ช
๋ น์ ๊ตฌ๋ฌธ๋ค์ ์ฝ๊ฐ ์ํํด๋ณผ ์ ์์
FT.PROFILE idx:items SEARCH QUERY 'chairs' LIMIT 0 0
์ ๋ ฌ๊ณผ ๊ฒ์
- RediSearch์ ์ ๋ ฌ์ ๊ดํ ์ฃผ์์ฌํญ
- RediSearch ์์ฒด๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ ์ ์์(sort ํ์ ์์)
- ๋์ ์ผ๋ฐ์ ์ธ ๊ฒ์์ ํ๊ณ ์ฟ ๋ฆฌ์ ์ผ๋ถ๋ก์ ์ด๋ค ํ๋๋ก ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํด ๋ฌ๋ผ๊ณ ํ๋ ๊ฒ
- ์ ๋ ฌ์ ์ด์ฉํ๊ธฐ ์ํด์ ์ธ๋ฑ์ค๋ฅผ ์
๋ฐ์ดํธ ํด์ผํจ(๊ตฌ์ ์ฒ์ผ๋ก ์ ๋ ฌ์ ์ฌ์ฉํ ํ๋ ์๋ ค์ฃผ๊ธฐ)
- ์ ํ
- ํ ๋ฒ์ ํ ํ๋๋ฅด๋ง ์ ๋ ฌํ ์ ์์
- ํ ๋ฒ์ ํ๋์ ์ ๋ ฌ ๊ฒฐ๊ณผ๋ง ์ป์ ์ ์์
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ์ ๋ ฌ์ ํ๋ ค๋ฉด ๋ชจ๋ ํ๋์ค
์ ๋ ฌ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ ํ๋
, ๊ทธ๋ ์ง ์์ ํ๋
๋ฅผ ๋ฐํ์ผํจ
- ์ธ๋ฑ์ค ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋๋ง๋ค ํ๋๋ฅผ ์ถ๊ฐํ ์๋ง ์์. ํ๋ ์ญ์ X, ๊ธฐ์กด ํ๋ ๋ณ๊ฒฝ X
- ๋ฐ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํด์ผํจ
๊ธฐ์กด ์ธ๋ฑ์ค ์
๋ฐ์ดํธ ํ๊ธฐ
๊ฒ์ ์คํํ๊ธฐ
๊ฒ์๊ฒฐ๊ณผ ์ญ์ง๋ ฌํ ํ๊ธฐ
- ๊ฒ์์ ์คํํ๋ฉด ์ด ๊ฒฐ๊ณผ ๊ฐ์์ธ total๊ณผ ๋ฐ๊ฒฌํ ๋ชจ๋ ํญ๋ชฉ ํด์๋ก ๋ ๋ฐฐ์ด์ด ๋ฐํ๋จ
- ์ค์ ๋ก ๊ฐ์ฒด๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด
- ๋ชจ๋ ๊ฐ์ฒด์๋ id๊ฐ ์์
- ๊ทธ id๋ ํญ๋ชฉ ํด์๊ฐ ์ ์ฅ๋ ๊ณณ์ ํค
- value๋ ํญ๋ชฉ ํด์ ์์ฒด
- ๊ฐ์ฒด๋ฅผ ๋ถํดํด์ id์ value๋ก ํ ๋นํ๊ธฐ