Redis 레디스
1. 개요
Redis? REmote DIctionary Server
Redis는 캐시서버입니다.
key-value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반 비관계형 데이터 베이스(NoSQL) 관리 시스템입니다.
in-memory 기반의 데이터 처리는 속도가 빠르지만 서버가 꺼지면 데이터가 사라진다는 단점을 가지고 있습니다.
- 일반적으로 저장장치에 DB를 조회하려면 저장장치로의 i/o가 발생하기 때문에 시간이 걸립니다.
- redis의 사용은 서비스 속도가 문제를 일으키는 상황에 활용 되는 방법중 하나입니다.
-> redis를 통해 캐시를 이용하여 in-memory 방식을 활용하여 데이터를 임시로 저장해두기 때문에 저장장치의 동작보다 빠르게 불러올 수 있습니다.
-자주 사용하는 데이터는 캐시 서버에서 우선 조회하고 없을 때 DB를 조회하면 전체적인 서비스의 속도를 향상 시킬 수 있습니다.
추가적인 활용 방안으로는 데이터에 만료시간을 지정하여 시간이 지나면 삭제 가능하도록 만들 수 있고 메모리가 꽉 찼어도 LRU(Least Recently Used) 알고리즘에 의해 데이터가 사라집니다.
*LRU : 가장 오랫동안 참조되지 않은 데이터를 교체하는 기법*
<지원하는 데이터 구조>
문자열
해시
리스트
집합
정렬된 집합
비트맵
하이퍼로그
지리공간 인덱스
스트림
2. Redis-cli 사용 방법
1) redis-cli 설치 및 접속
맥북
터미널 명령어 입력
brew install redis
redis-server
redis-server 입력시 기본 포트 6379로 연결 되었다면 연결 성공입니다.
윈도우
https://github.com/microsoftarchive/redis/releases
깃에서 관리하고 있는 윈도우 버전 설치
- redis 설치 기본포트 : 6379
redis-cli 접속
호스트명과 포트번호를 생략하면 localhost의 6379로 접속됩니다.
-n db번호
-a 비밀번호
-s 소켓
-u 서버 url 등 접속 시 다양한 옵션 설정이 사용 가능합니다.
# localhost:6379접속
redis-cli
# 원격접속
redis-cli -h #{호스트명} -p #{포트번호}
# 정보보기
reids-cli info
# help
redis-cli help
# 모니터링
redis-cli monitor
CRUD 명령어
set
종류 | 설명 |
keys | 키 출력 |
set | 키-값(key-value) 저장 |
mset | 여러개 데이터 저장 |
setex | 소멸시간 지정 |
get | value 조회 |
mget | 여러개 value조회 |
del | 삭제 |
ttl | 소멸 지정시간 까지 남은 시간(초단위) |
pttl | 소멸 지정시간 까지 남은 시간(밀리 초단위) |
rename | key값 이름변경 |
flushall | 모든데이터 삭제 |
Keys * 현재의 키값들을 확인할 수 있습니다.
(empty list or set) 은 현재는 저장된 키값이 없을 경우 출력됩니다.
127.0.0.1:6379> keys *
(empty list or set)
set key - value 형태로 저장
127.0.0.1:6379>set keyone valueone
OK
127.0.0.1:6379>keys *
1) "keyone"
mset 여러개의 key / value 형태로 저장
127.0.0.1:6379> mset ktwo vtwo kthree vthree
OK
127.0.0.1:6379> keys *
1) "khtree"
2) "keyone"
3) "ktwo"
setex 소멸시간 지정해서 저장
> [key] second [value] 시간은 초단위로 입력해야합니다.
입력 데이터 5초후에 사라집니다.
127.0.0.1:6379> setex kfour 5 kfour
OK
get key에 해당하는 value를 조회
(nil) 은 해당 key가 없을 경우 출력됩니다.
127.0.0.1:6379> get kfour
(nil)
127.0.0.1:6379> get kthree
"vthree"
mget 여러개의 value 조회
127.0.0.1:6379> mget keyone ktwo
1) "valueone"
2) "vtwo"
del 해당 key와 value을 삭제
(integer) 1은 삭제성공
(integer) 0은 해당 key가 없을 경우 출력됩니다.
127.0.0.1:6379> del kthree
(integer) 1
127.0.0.1:6379> keys *
1) "keyone"
2) "ktwo"
ttl 타임아웃까지 남은 시간을 초단위로 반환
pttl 타임아웃까지 남은 시간을 밀리 초단위로 반환
(integer) -2 는 key값이 없거나 소멸된 경우 출력됩니다.
(integer) -1 는 기한이 없는경우 출력됩니다.
127.0.0.1:6379> setex kthree 10 vthree
OK
127.0.0.1:6379> ttl kthree
(integer) 6
127.0.0.1:6379> ttl kthree
(integer) 4
127.0.0.1:6379> pttl kthree
(integer) 869
#지워진상태 키값
127.0.0.1:6379> ttl kthree
(integer) -2
#기한이 없는 키값
127.0.0.1:6379> ttl keyone
(integer) -1
keys *검색어* key 검색
해당 검색어가 포함된 모든 key를 검색합니다.
127.0.0.1:6379> keys *k*
1) "keyone"
2) "ktwo"
127.0.0.1:6379> keys *w*
1) "ktwo"
rename key의 이름을 변경하기 rename [기존key] [변경key]
key가 존재 할경우 덮어씁니다.
앞서 keyone 이라는 이름을 가진 키를 kone으로 변경하였습니다.
127.0.0.1:6379> rename keyone kone
OK
127.0.0.1:6379> keys *
1) "ktwo"
2) "kone"
flushall 모든 데이터(key와 value)를 삭제
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)