Redis 란?
Redis 는 Key-Value 형태로 데이터를 관리하는 오픈 소스이다. Redis 는 빠른 속도와 간편한 사용법으로 인해 캐시, 인증 토큰, 세션 관리 등등 여러 용도로 사용되고 있다. Redis는 빠른 속도 대신 서버가 꺼지면 데이터가 휘발되는 특징이 있는데, 이번 프로젝트에선 Redis를 채팅룸 저장과 GameStartSet을 잠시 저장하는 DB로 사용하는 용도로 채택하였다.
- In-Memory Data Strucutre Store
- Key - Value 형태로 데이터 저장
- 여러 가지 Value 타입 저장 가능 (String, Set, Hash, List 등등..)
- Single Thread
- 데이터 만료 시간 지정 가능 -> refresh토큰에 사용된다고 한다.
1. macOS에 Redis 설치
- Homebrew를 사용하여 macOS에서 Redis 설치 및 시작을 할 수 있다.
- 다운로드 -> (https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/)
- Homebrew는 macOS에 Redis를 설치하는 가장 쉬운 방법 !
2. 전제 조건
Homebrew가 설치되어 있는지 확인하기위해 터미널에서 다음을 실행한다.
- brew --version
3. 설치
터미널에서 다음을 실행한다. 시스템에 Redis가 설치된다.
- brew install redis
4. Redis 시작 및 중지하기
1) Redis 설치를 테스트하기 위해 터미널창에 다음을 입력한다. 만약 정상적으로 실행이 된다면, log가 쭈루루룩 올라오는 것을 확인할 수 있다. 중지하려면 Ctrl-C를 입력한다.
- redis-server
2) 위의 명령어를 대신해 아래와 같은 명령어로 실행할 수도 있다. (포그라운드에서 Redis를 실행하는 대신 launchd를 사용하여 프로세스를 백그라운드에서 시작할 수도 있다. 이렇게 하면 Redis가 시작되고 로그인 시 다시 시작된다.)
- brew services start redis
3) 중지하려면 아래의 명령어를 입력한다.
- brew services stop redis
5. Redis 연결
아래의 명령어로 레디스에 연결한다.
- redis-cli
만약 한국어깨짐 현상이 있다면 아래 명령어를 입력해 준다.
- redis-cli --raw
6. Redis 명령어
참고 링크 -> https://redis.io/commands/
1) String
- 저장
- set {key} {value} : key, value 를 저장
- mset {key} {value} [{key} {value} ...] : 여러 개의 key, value 를 한번에 저장
- setex {key} {seconds} {value} : key, seconds, value 저장 (설정한 시간 뒤에 소멸)
- 조회
- keys * : 현재 저장된 키값들을 모두 확인 (부하가 심한 명령어라 운영중인 서비스에선 절대 사용하면 안됨)
- get {key} : 지정한 key 에 해당하는 value 를 가져옴
- mget {key} [{key} ...] : 여러 개의 key 에 해당하는 value 를 한번에 가져옴
- ttl {key} : key 의 만료 시간을 초 단위로 보여줌 (-1 은 만료시간 없음, -2 는 데이터 없음)
- pttl {key} : key 의 만료 시간을 밀리초 단위로 보여줌
- type {key} : 해당 key 의 value 타입 확인
- 삭제
- del {key} [{key} ...] : 해당 key 들을 삭제
- 수정
- rename {key} {newKey} : key 이름 변경
- expire {key} {seconds} : 해당 키 값의 만료 시간 설정
- 기타
- randomkey : 랜덤한 key 반환
- ping : 연결 여부 확인 ("ping" 만 입력하면 "PONG" 이라는 응답이 옴)
- dbsize : 현재 사용중인 DB 의 key 의 갯수 리턴
- flushall : 레디스 서버의 모든 데이터 삭제
- flushdb : 현재 사용중인 DB 의 모든 데이터 삭제
2) Set
Redis 에서는 Set 에 포함된 값들을 멤버라고 표현한다. 여러 멤버가 모여 집합 (Set) 을 구성한다.
- sadd {key} {member} [{member} ...]
- key 에 새로운 멤버들을 추가. key 가 없으면 새로 만듬
- smembers {key}
- key 에 설정된 모든 멤버 반환
- srem {key} {member [{member} ...]}
- key 에 포함된 멤버들 삭제. 없는 멤버 입력하면 무시됨
- scard {key}
- key 에 저장된 멤버 수를 반환
- sismember {key} {member}
- member 가 해당 key 에 포함되는지 검사
3) Hash
Hash 자체를 나타내는 key 와 해당 key 에 포함된 field 까지 사용해서 값을 조회/저장할 수 있습니다.
- hset {key} {field} {value} [{field} {value} ...]
- key 를 이름으로 한 Hash 자료 구조에 field 와 value 값을 저장
- hget {key} {field}
- key Hash 값에 포함된 field 의 value 를 가져옴
- hdel {key} {field} [{field} ...]
- field 값으로 데이터 삭제
- hlen {key}
- Hash 가 갖고 있는 field 갯수 반환
- hkeys {key}
- Hash 가 갖고 있는 모든 field 출력
- hvals {key}
- Hash 가 갖고 있는 모든 value 출력
- hgetall {key}
- Hash 가 갖고 있는 모든 field 와 value 출력
7. Redis 사용시 발생한 문제, 해결 하지 못함
위와 같이 hgetall {Key} 로 조회했을 때, 내용이 깨져서 나오는 문제가 있다. 일단 한글은 redis-cli --raw 명령어를 사용해서 깨지지 않고 잘 나오고 있는데, 다른 부분들이 다 저렇게 알 수 없는 문자들로 나온다 ... 구글링을 반나절 한 결과 Medis 라는 Redis GUI 프로그램을 찾긴 했지만 $5 구독비가 있기 때문에 일단 사용을 보류하기로 했다. 해결 방법 아시는분 제발 댓글 좀 부탁드립니다.
- 무료로 받을 수 있는 깃헙 주소 -> https://github.com/luin/medis
- 공식 다운로드 사이트 주소 -> https://getmedis.com/
아래는 Redis GUI 참고 블로그
[ 참고자료 ]
- https://bcp0109.tistory.com/327
- https://redis.io/commands/
- https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/
'항해99 개발 일지 > [Final] 실전 프로젝트' 카테고리의 다른 글
[06] Spring Security 인증인가 - 예외 커스텀 핸들링 (0) | 2023.01.11 |
---|---|
[05] Hashmap을 JSON으로 변환하는 법 (0) | 2023.01.11 |
[04] 카카오 로그인 PostMan 테스트 방법 (0) | 2023.01.10 |
[03] (Spring Boot) WebSocket / WebRTC (1) | 2023.01.10 |
[01] 항해99 마지막, 실전 프로젝트 기획 (0) | 2023.01.09 |