# redis는 0~15번까지의 database로 구성된다.
select db번호
# 데이터베이스 내 모든 키 조회
keys *
# set을 통해 key:value 세팅
set user:email:1 gdhong@gmail.com
# nx 옵션: 이미 키가 존재하면 저장 X, 존재하지 않으면 저장 O
set user:email:2 khyou@gmail.com nx
# ex 옵션: ttl 시간 지정 (초단위)
set user:email:3 cskim@gmail.com ex 10
# get을 통해 key:value 읽기
get user:email:3
레디스를 쓰는 이유는 빠른 처리 속도, 동시성 이슈 해결(싱글 스레드) 이 두 가지라고 보면 됨.
좋아요 카운팅, 재고관리는 동시성 이슈가 있는데 레디스로 이를 해결 할 수 있음.
set likes:posting:1 0
decr likes:posting:1
get likes:posting:1
캐싱 처리는 빠른 처리 속도를 필요로 하는 작업에서 쓰기 좋음.
예를 들어, 커뮤니티 사이트에 인기글은 조회가 자주 일어나니까 캐싱하면 좋음.
반면에 인기 없는 글은 캐싱이 불필요함.
그래서 보통 WAS에서 처리할 때 조회가 발생하면 DB에서 조회한 후에 REDIS에 저장함.
그 다음에 또 조회 요청이 오면, REDIS를 조회하고 REDIS에 있으면 REDIS에 있는 데이터를 사용하고 아니면 DB 조회한 다음 REDIS에 저장함.
캐싱 팁
캐싱을 사용할 때는 데이터를 JSON 형식으로 저장하는 게 좋음. JSON은 객체와 구조가 유사해서 JSON을 바로 객체로 변경할 수 있는 라이브러리가 많음(ex. Jackson) 그래서 JSON 형식의 문자열로 데이터를 저장해두고, REDIS에서 데이터를 읽어와서 바로 객체로 변환해서 사용하면 편리함.
# list 자료구조: deque
# lpush: 데이터를 왼쪽 끝에 삽입
lpush mylist elem1
# rpush: 데이터를 오른쪽 끝에 삽입
rpush mylist elem2
# lpop: 데이터를 왼쪽에서 꺼내기
lpop mylist
# rpop: 데이터를 오른쪽에서 꺼내기
rpop mylist
# list 조회
# -1은 리스트의 끝자리(마지막 index)를 의미. -2는 끝에서 두번째를 의미
lrange mylist 0 0 # 첫번째 값만 조회
lrange mylist -1 -1 # 마지막 값만 조회
lrange mylist 0 -1 # 처음부터 끝까지 조회
# 데이터 개수 조회
llen mylist
# ttl 적용. ttl 시간이 지나면 해당 key-value 삭제
expire mylist 20
# ttl 조회
ttl mylist
방문한 페이지를 rpush로 저장하고, 최근 방문한 페이지 조회 시 lrange로 조회.