Redis의 활용
인증, 캐싱, 재고관리 등에 사용이 되는데 이것들은 데이터의 영구적 보관보단 일시적 관리에 사용된다. → ttl (시간제한)이 많이 사용됨
데이터가 update되면 레디스에 있는 캐싱된 데이터도 같이 update시켜줘야 함
aws를 사용하면 자동 캐싱을 해주는 경우가 있어서 더 좋은 속도 (성능)을 경험할 수 있다.
자료구조
string : value가 string →재고관리
list : value가 리스트 형식, 자바 deque 형식이다 → 최근 방문 페이지
set : 중복제거, 순서 없음 → 오늘 방문자수
zset : score를 기준으로 순서 있는 set → 최근 본 상품
hset : value가 객체 형식
1. string
# 좋아요 기능 구현
set likes:posting:1 0
incr likes:posting:1 # 특정 key값의 value를 1만큼 증가
decr likes:posting:1
get likes:posting:1
# 재고 기능 구현
set product:1:stock 100
decr product:1:stock
get product:1:stock
# bash쉘을 활용하여 재고감소 프로그램 작성
redis_stock.sh
# 캐싱 기능 구현
# 1번 author 회원 정보 조회
# select name, email, age from author where id=1;
# 위 데이터의 결과값을 redis로 캐싱 : json 데이터 형식으로 저장
set user:1:detail "{\\"name\\":\\"hong\\", \\"email\\":\\"hong@naver.com\\", \\"age\\":30}" ex 10
2. list
# list
# redis의 list는 java의 deque와 같은 구조 즉,double-ended queue구조
# 데이터 왼쪽 삽입
LPUSH key value
# 데이터 오른쪽 삽입
RPUSH key value
# 데이터 왼쪽부터 꺼내기
LPOP key
# 데이터 오른쪽부터 꺼내기
RPOP key
# 데이터 개수 조회
LLEN key
lpush hongildongs hong1
lpush hongildongs hong1
lpush hongildongs hong1
lpop hongildongs
llen hongildongs
# list의 요소 조회시에는 범위 지정
# 0 -1 처음부터 끝까지
lrange hongildongs start end
lrange hongildongs 0 -1
# TTL 적용
expire hongildongs 30
# TTL 조회
ttl hongildongs
# 꺼내서 없애는게 아니라, 꺼내서 보기만
lrange hongildongs -1 -1
lrange hongildongs 0 0
# pop과 push 동시에
RPOPLPUSH A리스트 B리스트
# 어떤 목적으로 사용될 수 있을까?
# 최근 방문한 페이지
# 5개 정도 데이터 push
# 최근 방문한 페이지 3개를 보여주기
lpush recently_visit naver
lpush recently_visit daum
lpush recently_visit kakao
lpush recently_visit google
lpush recently_visit nate
lrange recently_visit 0 2
# 방문 페이지 5개에서 뒤로가기 구현
rpush forwards naver
rpush forwards daum
rpush forwards kakao
rpush forwards google
rpush forwards nate
rpoplpush forwards backwards
3. set
# set 조회
smembers members
# set에서 멤버 삭제
srem members member2
# set멤버 개수 반환
scard members
# 특정 멤버가 set안에 있는지 존재 여부 확인
sismember members member3
# 매일 방문자수 계산
# 재방문은 count하지 않음
sadd visit:2024-05-27 hong1@naver.com
4. zset
# zset (sorted set)
zadd zmembers 3 member1
zadd zmembers 4 member2
zadd zmembers 1 member3
zadd zmembers 2 member4
# score 기준 오름차순 정렬
zrange zmembers 0 -1
# score 기준 내림차순 정렬
zrevrange zmembers 0 -1
# zset 삭제
zrem zmembers members2
# zrank는 해당 멤버가 몇번째 index인지 출력
zrank zmembers member2
# 최근 본 상품목록
zadd recent:products 192411 apple
zadd recent:products 192413 apple
zadd recent:products 192415 banana
zadd recent:products 192417 orange
zadd recent:products 192420 apple
zrevrange recent:products 0 2
5. hset
# hashes
hset product:1 name "apple" price 1000 stock 50
hget product:1 name
hget product:1 price
hget product:1 stock
# 모든 객체 값 get
hgetall product:1
# 특정 요소 값 수정
hset product:1 stock 40
# 특정 요소의 값을 증가
hincrby product:1 stock 5
# 특정 요소의 값을 감소
hincrby product:1 stock -5
메시지의 pub/sub 구조
redis를 활용하여 메시지를 발행하고 구독하는 서비스
한번 발송된 메시지는 저장되지 않음
- pub/sub 구조의 예시
- kafka가 pubsub구조를 사용하는데 a서버와 b서버 통신시 두 서버가 직접 통신하지 않고 kafka라는 중간 저장소를 통해 b서버가 통신이 잠깐 끊기더라도 데이터가 유실되지 않고 안전하게 저장소에서 메시지를 받아갈 수 있다.
'Database' 카테고리의 다른 글
Public Key Retrieval is not allowed & Access denied for user 'root'@'localhost' 해결 (0) | 2024.06.20 |
---|---|
Redis 설치 및 접속하기 (0) | 2024.05.24 |
mariadb 사용자 관리와 프로시저 (1) | 2024.05.23 |
데이터 베이스 모델링과 정규화 (0) | 2024.05.23 |
mariadb join, union, subquery, group by (1) | 2024.05.22 |