Redis 설치
- 소스와 바이너리 형태로 제공됨
- 주로 Linux에 설치해서 사용
- 소스 빌더, 바이너리 다운로드, 패키지 관리자 등 다양한 방법으로 설치 가능
- 리눅스 설치
- wget https://download.redis.io/releases/redis-6.2.4.tar.gz
tar xzf redis-6.2.4.tar.gz
make redis-6.2.4
- wget https://download.redis.io/releases/redis-6.2.4.tar.gz
- MacOS Redis 설치
- brew install redis
- MacOS Docker을 이용한설치 ( 추천 )
- Docker Desktop 다운로드 하여 설치 ( https://www.docker.com )
도커 실행 화면
설치가 끝났다면 터미널에서 docker version 명령어 입력하여 도커의 정상 설치 여부를 확인 합니다.
- docker version
- docker registry 에서 redis 이미지 불러오기
- docker pull redis
- redis 실행 ( -d 옵션을 주지 않을 경우 Ctrl + C 로 종료 해야 합니다 )
- redis 도커 컨테이너 실행 : docker run --name redis-container -p 6379:6379 -d redis
- --name redis-container : 컨테이너의 이름을 redis-container 로 설정합니다.
- -p 6379:6379 : 호스트의 6379 포트와 컨테이너의 6379 포트를 연결합니다.
- -d : 컨테이너를 백그라운드에서 실행합니다.
- redis : 실행할 이미지의 이름
- redis 도커 컨테이너 실행 : docker run --name redis-container -p 6379:6379 -d redis
- redis 중단
- docker stop my-redis
- redis 시작
- 컨테이너 확인 : docker ps -a
- redis 구동 : docker start [container id or name]
Redis 커맨드
redis 컨테이너 구조
- redis-server : 레디스 서버
- redis-cli : 레디스 서버에 커맨드를 실행할 수 있는 인터페이스
- docker container 안에서 shell 실행
- docker exec -it my-redis /bin/sh
- container 내부 쉘에서 redis-cli 실행 ( 호스트와 포트를 지정하지 않으면 127.0.0.1:6379 사용 )
- redis-cli
- Redis 커맨드 사용
- 127.0.0.1:6379> set key1 banana
- 127.0.0.1:6379> get key1
Redis 주요 명령어
keys * or keys pattern 명령어는 전체 키를 가져오기 때문에 성능에 문제가 발생할 수 있습니다.
대규모 데이터베이스에서 키를 안전하게 나열하기 위해 scan 명령어를 사용하는 것이 좋습니다. scan은 커서 기반의 반복자를 제공하여 데이터베이스를 작은 덩어리로 검색합니다. 이는 대규모 데이터 셋에서도 효율적 입니다.
scan cursor [match pattern] [count count]
dbsize : 키의 개수 반환
flushall : 전체 키 삭제
키 관리 | ||
del key | 키를 삭제 합니다. | |
expire key seconds | 키에 만료 시간을 설정합니다. | |
ttl key | 키의 남은 시간을 반환합니다. -1 : 키의 만료 시간이 지정되지 않아 계속 보관 되는 상태이며, redis 서버가 재시작 되면 사라진다. |
|
keys pattern | 패턴과 일치하는 모든 키를 나열 합니다. | |
문자열(string) | ||
set key value | 키에 값을 설정합니다. | |
get key | 키의 값을 가져옵니다. | |
incr key | 숫자 값을 1 증가 시킵니다. | |
decr key | 숫자 값을 1 감소 시킵니다. | |
mset mine milk yours coffee | 여러 키에 대한 값을 한번에 저장한다. mset key value key value |
|
mget mine yours | 여러 키에 대한 값을 한번에 얻어온다. mset key1 key2 |
|
리스트(list) Linked-list 형태의 자료구조 ( 인덱스 접근은 느리지만 데이터 추가/삭제가 빠름 ) Queue와 Stack로 사용할 수 있음 |
||
lpush key value | 리스트의 왼쪽에 값을 추가합니다. | |
rpush key value | 리스트이 오른쪽에 값을 추가합니다. | |
lpop key | 리스트의 왼쪽에서 값을 꺼냅니다. | |
rpop key | 리스트의 오른쪽에서 값을 꺼냅니다. | |
lpush mylist leftvalue rpush mylist rightvalue lrange mylist 0 -1( 마지막 아이템을 -1) lpop mylist rpop mylist llent key : 값이 몇개가 있는지 |
||
셋(set) 순서가 없는 유니크한 값의 집합 검색이 빠름 개별 접근을 위한 인덱스가 존재하지 않고, 집합 연산이 가능함(교집합. 합집합 등) |
||
sadd key value | 셋에 값을 추가합니다. | |
srem key value | 셋에서 값을 제거 합니다. | |
scard key | set에 저장된 아이템 개수를 반환한다. | |
smembers key | 셋의 모든 멤버를 나열합니다. | |
sismember key value | 셋에 특정 값이 있는지 확인합니다. | |
spop key spop key [count] -> 이 명령은 키에서 한개 또는 count 만큼 키를 꺼냅니다. 그리고 꺼내어진 키는 삭제 됩니다. |
||
해시(hash) 하나의 key 하위에 여러개의 field-value 쌍을 저장 여러 필드를 가진 객체를 저장하는 것으로 생각할 수 있음 hincrby 명령어를 사용해 카운터로 활용 가능 |
||
hset key field value field value | 해시의 필드에 값을 설정합니다. | |
hget key field | 해시의 필드 값을 가져옵니다. | |
hdel key field | 해시의 필드를 삭제합니다. | |
hkeys key | 전체 키를 확인한다. | |
hmget kye field field.. | 여러개의 필드를 한번에 가져옵니다. | |
hincrby key viewcount1 | 특정 필드의 값을 integer로 취급하여 지정한 숫자를 증가시킨다. | |
Sorted Set Set과 유사하게 유니크한 값의 집합 각 값은 연관된 score를 가지고 정렬되어 있음 정렬된 상태이기에 빠르게 최소/최대값을 구할 수 있음 순위계산, 리더보드 구현 등에 활용 |
||
zadd myrank 10 apple 20 banana 30 grape | 정렬된 셋과 멤버와 점수를 추가합니다. key : myrank apple (score:10) banana (score:20) grape (score:30) |
|
zrank myrank banana | 멤버의 순위를 반환 합니다. | |
zrange myrank 0 1 ( 오름차순으로 정렬된 기준 ) | 특정 범위의 값을 반환한다. | |
zrevrank myrank apple | 특정 값의 위치(순위)를 반환한다 | |
zrem | 한개 이상의 값을 삭제한다 | |
Bitmaps 방문현황을 만들때 유용하다. 비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장 하나의 비티맵이 가지는 공간 42억개 정도 비트 연산 가능 |
||
setbit key 10 1 | 비트맵의 특정 오프셋에 값을 변경한다. key 10번째 index 1 로 변경 |
|
getbit key 10 | 비트맵의 특정 오프셋 값을 반환한다. | |
bitcount key | 비트맵에서 1인 상태인 비트의 수를 반환 | |
bitop and result today yesterday | 비트맵들간의 비트 연산을 수행하고 결과를 비트맵에 저장한다. |
'Redis' 카테고리의 다른 글
Redis 리더보드 만들기 (0) | 2023.12.11 |
---|---|
서비스 속도를 높이는 캐시 레이어 (0) | 2023.12.11 |
분산 환경에서 세션 스토어 만들기 (2) | 2023.12.11 |
RDBMS & NoSQL & Redis (0) | 2023.12.11 |
Redis 소개와 특징 (0) | 2023.12.11 |