
select DB번호 명령어로 특정 DB 선택 가능select 1 # 1번 DB 선택
keys * # 현재 DB의 모든 키 조회
1. 데이터 저장
SET key value SET user:email:1 user1@gmail.com
- Key:
user:email:1- Value:
user1@gmail.com
2. 데이터 조회
GET key * GET user:email:1
3. NX 옵션 (값이 존재하지 않을 경우만 저장)
SET user:email:2 user2@gmail.com NX
- 기존 데이터가 있으면 저장하지 않음
4. EX(expiration) : 만료시간(초단위) 옵션
SET user:email:3 user3@gmail.com EX 10
- 10초 후 데이터 자동 삭제** (TTL 설정 가능)
TTL user:email:3 # 남은 만료 시간 확인
보통 redis에 re-fresh 토큰을 저장해둔다
먼저 서버는 RDB에서 가서 조회하지 않고 redis에 있는지 확인을 함
그 다음 RDB에서 크로스 체크해서 맞으면 사용자한테 그 요청정보를 허락하고 웹서비스 화면데 보여줌!!
이유 : RDB에서 찾으면 시간이 너무 오래걸리기 때문에 redis사용시 빠르게 조회가능!
토큰 생성 및 저장
exp 필드)**이 설정됨SET user:1:refresh_token asdf23fddfa EX 604800 # 7일 TTL 설정
토큰 사용 및 검증
exp** 필드를 확인하여 유효한지 검증GET user:1:refresh_token # Refresh Token 확인
TTL user:1:refresh_token # 남은 TTL 확인
토큰 만료 처리
exp** 필드의 시간이 지난 경우 → 새로운 토큰 발급 불가능DEL user:1:refresh_token # 수동으로 삭제 가능
exp** + TTL)로 더욱 안전한 인증 시스템 구축 가능DEL user:email:1 # 특정 Key 삭제
FLUSHDB # 현재 DB의 모든 Key 삭제
SET likes:posting:1 0 # 포스팅 1번의 좋아요 초기값 설정
INCR likes:posting:1 # 좋아요 증가
DECR likes:posting:1 # 좋아요 감소
GET likes:posting:1 # 좋아요 개수 확인
문제: 같은 사용자가 동시에 좋아요 버튼을 클릭하면 데이터 충돌 발생 가능
해결: Redis의 INCR 명령어는 원자적(Atomic) 연산을 제공하여 동시 요청에도 안전하게 처리 가능
예제
- 카페에서 줄을 서서 주문하는 것처럼, 한 명씩 차례로 요청을 처리
- 여러 사람이 동시에 좋아요를 눌러도 충돌 없이 정확한 개수 증가
DECR stock:item:1 # 상품 재고 감소
SET posting:1 "{\"title\": \"study redis\", \"contents\": \"redis is ..\", \"author_email\": \"user@gmail.com\"}" EX 100
예제
- 우리가 인터넷 브라우저에서 자주 방문하는 웹사이트가 브라우저 캐시에 저장되어 빠르게 로딩되는 것과 같은 원리!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring:
redis:
host: localhost
port: 6379