CPU는 빠르게 계산을 처리해야하고
Memory는 계산 중간중간 값을 저장하고, 계산이 끝나면 사용했던 값을 지운다
Disk는 계산이 끝나고 영구적으로 값을 저장한다
메모리와 디스크의 IO 성능은 수십에서 수천배 차이가난다
CPU >>>>>>>>>>>> Memory >>>>>>>>>>>>>>>>>>>> Disk
CPU >>>>>>>>>>>> 캐시 >>>>>>>>>>>>>>>>>>>> RDB
SET Key Value -> 데이터를 저장한다.
set name viva -> name이라는 키에 viva라는 값 넣기
get name -> name이라는 키에 있는 값 가져오기
============================================================
SET user:{userid}:name viva -> user:1:name 이라는 키에 viva라는 값 넣기
set user:1:name viva1
set user:2:name viva2
set user:3:name viva3
set user:4:name viva4
============================================================
mget : 여러개의 key의 값을 한번에 가져오는 기능
mget user:1:name user:2:name user:3:name
Lists는 LinkedList, Stack, Queue를 의미합니다.
Stack의 경우
RPUSH students viva1
RPUSH students viva2
RPUSH students viva3
RPUSH students viva4
RPUSH students viva5
RPOP students -> viva5
RPOP students -> viva4
RPOP students -> viva3
RPOP students -> viva2
RPOP students -> viva1
Queue의 경우
RPUSH teachers viva1
RPUSH teachers viva2
RPUSH teachers viva3
RPUSH teachers viva4
RPUSH teachers viva5
LPOP teachers -> viva1
LPOP teachers -> viva2
LPOP teachers -> viva3
LPOP teachers -> viva4
LPOP teachers -> viva5
RPUSH = queue
LPUSH = stack
유니크한 정보의 모음을 의미합니다.
redis의 sets를 활용하는 대표적인 예시 'SNS follow'
SADD users:1:follow 1 2 3 4 5 6 7 -> userId 1번의 follow에 유저 1,2,3,4,5,6,7 넣기
SCARD users:1:follow -> userId 1번의 모든 follow 유저 갯수 출력
SMEMBERS users:1:follow -> userId 1번의 모든 follow 유저 출력
## SET은 유니크한 값 유지
SADD users:1:follow 1
SADD users:1:follow 1
SADD users:1:follow 1
SADD users:1:follow 1
SMEMBERS users:1:follow -> 똑같이 1,2,3,4,5,6,7 출력 됨
## userId 1번과 userId 2번의 공통된 follow 찾기
SADD users:2:follow 1 3 5 7 9
SINTER users:1:follow users:2:follow -> 1,3,5,7 출력 됨
# HSET {key} {필드} {필드 값} {필드} {필드 값} ...
HSET user:1 name viva email viva@naver.com mbti enfj
HGET user:1 email
HGET user:1 mbti
HGETALL user:1 -> 모든 필드 출력
## 팔로우 추가 해봅시다
HSET user:1 follow 0
HGETALL user:1 -> 모든 필드 출력
HINCRBY user:1 follow 1
HGETALL user:1 -> 모든 필드 출력
HINCRBY user:1 follow 1
HGETALL user:1 -> 모든 필드 출력
Sets와 비슷하지만 정렬 기능이 추가된 개념
redis의 Sorted Set을 사용하는 대표적인 예시 '게임 랭킹'
## ZADD {key} {score} {value} {score} {value}...
ZADD user:rank 100 viva1 200 viva2 300 viva3 400 viva4
## ZRANGE {key} {시작 index} {종료 index} {기준} {몇 개 출력할건지} {점수랑 같이 출력할건지}
zrange user:rank +inf 0 byscore rev limit 0 3 withscores
뜻은
user:rank 라는 키에서 +inf(가장 마지막 인덱스) 부터 0번까지 score 기준으로 검색할건데 REV(거꾸로)
옵션으로 검색할 것이다.
LIMIT 0 3 1위 ~ 3위까지만 검색할 것이다 WITHSOCRES 점수랑 같이 조회 할것이다.
## ZINCRBY {key} {score} {value}
ZINCRBY user:rank 10000 viva1
zrange user:rank +inf 0 byscore rev limit 0 3 withscores -> 1위가 변경되었는지 확인
Geospatial는 위도 경도를 나타내는 데이터
https://www.findlatlng.org/
광화문에서 인천공항까지 거리 측정 예시
## GEOADD {key} {위도 경도} {value}
geoadd place:korea 126.9768121 37.5758772 seoul
geoadd place:korea 126.4419679 37.458666 incheon
## GEODIST {key} {value} {value}
## 광화문에서 인천공항까지 거리
geodist place:korea seoul incheon {default m}
geodist place:korea seoul incheon km
거리 측정 실제 비교해보기!
https://www.google.co.kr/maps/place/%EC%9D%B8%EC%B2%9C%EA%B5%AD%EC%A0%9C%EA%B3%B5%ED%95%AD/data=!3m1!4b1!4m6!3m5!1s0x357b9a833a5efa59:0x8d4ba096cb5cbed4!8m2!3d37.458666!4d126.4419679!16zL20vMDE2MWdi?hl=ko&entry=ttu&g_ep=EgoyMDI0MDkxNi4wIKXMDSoASAFQAw%3D%3D
// 이미지 받기
docker pull redis/redisinsight