Redis 는 Key-Value 형태로 데이터를 관리하는 오픈 소스입니다.
Redis 는 빠른 속도와 간편한 사용법으로 인해 캐시, 인증 토큰, 세션 관리 등등 여러 용도로 사용됩니다.
도커로 설치 후 실행 가능합니다. (https://hub.docker.com/_/redis 참고)
# 이미지 다운 (docker images 로 확인 가능)
$ docker pull redis
# 컨테이너로 레디스 실행 (--name: 컨테이너 이름 설정, -p: 포트 포워딩, -d: 백그라운드에서 실행)
$ docker run --name some-redis -p 6379:6379 -d redis
# redis-cli 접속
$ docker exec -it some-redis redis-cli
Redis 는 여러 개의 데이터 타입을 저장할 수 있기 때문에 각각의 명령어가 여러개 존재합니다.
모든 명령어는 Redis Commands 를 참고하시고 여기에는 일부 자료구조의 간단한 명령어만 정리합니다.
다만 Redis 는 Single Thread 기반이기 때문에 keys
, flushall
, flushdb
, getall
등 일반적으로 생각했을 때 O(N) 의 시간복잡도를 가질 것 같은 명령어는 운영 환경에서 사용하면 위험합니다.
가장 기본적인 Value 타입입니다.
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 의 모든 데이터 삭제Redis 에서는 Set 에 포함된 값들을 멤버라고 표현합니다.
여러 멤버가 모여 집합 (Set) 을 구성합니다.
진짜 집합처럼 교집합, 차집합 등도 구할 수 있는데 여기선 간단하게 CRUD 만 알아봅니다.
sadd {key} {member} [{member} ...]
smembers {key}
srem {key} {member [{member} ...]}
scard {key}
sismember {key} {member}
Redis 에서 저장가능한 자료구조 중에 Hash 도 있습니다.
Hash 자체를 나타내는 key 와 해당 key 에 포함된 field 까지 사용해서 값을 조회/저장할 수 있습니다.
hset {key} {field} {value} [{field} {value} ...]
hget {key} {field}
hdel {key} {field} [{field} ...]
hlen {key}
hkeys {key}
hvals {key}
hgetall {key}