Redis(레디스) 설치 (Windows) 및 기본 명령어, 자료구조
Redis(레디스)란, Remote Dictionary Server의 약자로 Key-Value 구조로 데이터를 저장하는 오픈소스기반 NoSQL 데이터베이스입니다. 인메모리 DB로 데이터 처리 속도가 빠르고 사용이 간편한 특징을 가지고 있고, 주로 캐싱(Cache), 세션관리, 검색어 순위관리 등에 사용되고 있습니다.
Windows OS에서 Redis(레디스) 무설치 실행
Redis는 공식적으로 리눅스 기반의 OS만 지원하지만, 개발 및 테스트용도로 Wisdows OS버전을 아래 URL에서 지원하고 있는 것 같습니다.
https://github.com/microsoftarchive/redis/releases
아래 이미지와 같이 최신버전의 zip 레디스 설치 파일을 다운로드합니다. 윈도우에서 설치를 하지 않고 간단하게 개발/테스트 용도로 수행을 하기 위해 설치파일(msi)이 아닌 zip파일로 다운로드를 하였습니다. 영구설치를 원하시면 msi파일을 다운로드해서 설치를 하시면 됩니다. (버전이 3대로 너무 낮은데, 좀 더 높은 버전의 Redis를 윈도우에서 사용하고 싶으시면 Docker 컨테이너로 설치하셔서 사용하시는 것을 추천드립니다.)
윈도우에서 Redis를 운영의 용도로 활용은 어려울 것 같고, 개발 및 테스트 용도로 아주 간단하게 설치를 하지 않고 실행을 하는 식으로 정리를 해보려고 합니다.
다운로드 받은 Zip 파일의 압축을 풀면, 아래와 같이 redis-server.exe 파일이 있습니다. 이 파일을 실행하면 redis server가 설치필요 없이 실행이 됩니다.
아래와 같은 CMD창이 실행이 되면 localhost:6379 포트로 Redis가 실행되는 것을 확인할 수 있고, 이 CMD 창을 닫으면 Redis가 종료되는 것을 확인 할 수 있습니다.
다음으로는 redis-cli.exe 파일을 실행하여 Redis에 접속을 합니다. redis-cli를 실행하면 CMD 형태로 127.0.0.1:6379> 화면이 나오면서 Redis 서버에 명령어 모드로 정상적으로 접속을 하였습니다.
이 창에서 info라는 명령을 입력하여 현재 Redis에 정상적으로 접속을 한 것을 확인할 수 있고, 레디스 버전 등 여러 정보도 확인할 수 있습니다.
기본 명령어 및 자료구조
다음으로 아주 간단하게 명령어 및 자료구조에 대해 정리를 해보려고 합니다.
Keys
Keys 명령으로 현재 저장된 데이터의 모든 Key 값 정보를 불러올 수 있습니다. 실제 운영환경에서는 성능상 주의해야 할 명령어입니다.
127.0.0.1:6379> keys *
1) "k:2"
2) "k:1"
Strings
가장 기본이 되는 자료구조는 Strings이며, Key : Value 기본 구조로 저장이 되고 Key와 Vlaue모두 512MB 사이즈까지 저장이 됩니다.
- set [key] [value] : 데이터 저장 및 업데이트
- mset [key1] [value1] [key2] [value2] ... : 여러쌍의 key value 데이터를 저장
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> mset k2 v2 k3 v3
OK
- get [key] : value 값을 조회
- mget [key1] [key2] : value 데이터를 조회
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
- del [key] : 데이터를 삭제
- exists [key] : 데이터 존재 여부 (존재하면 1)
- type [key] : 데이터 타입 조회
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> exists k1
(integer) 0
127.0.0.1:6379> type k2
string
Lists
Linked List와 유사한 형태인 순서를 가지는 배열 형태의 데이터로 빠른 접근이 가능합니다.
- rpush [key] [value] : 새로운 값을 배열의 뒤쪽 (오른쪽)에 추가
- lpush [key] [value] : 새로운 값을 배열의 앞쪽 (왼쪽)에 추가
- lrange [key] [start] [stop] : 배열 값을 조회 (stop을 -1로 하면 전체를 조회)
127.0.0.1:6379> rpush list1 v1
(integer) 1
127.0.0.1:6379> rpush list1 v2
(integer) 2
127.0.0.1:6379> lpush list1 v3
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "v3"
2) "v1"
3) "v2"
- rpop [key] : 배열의 뒤쪽 (오른쪽) 값을 꺼냄
- lpop [key] : 배열의 앞쪽 (왼쪽) 값을 꺼냄
- llen [key] : 배열의 길이를 리턴
127.0.0.1:6379> lrange list1 0 -1
1) "v3"
2) "v1"
3) "v2"
127.0.0.1:6379> rpop list1
"v2"
127.0.0.1:6379> lpop list1
"v3"
127.0.0.1:6379> llen list1
(integer) 1
Hashes
Value에 HashMap과 유사한 Key:value의 Map 형태의 데이터를 저장하는 구조입니다.
- hset [key] [map-key] [map-value] : Map 데이터를 저장
- hget [key] [map-key] : Map 데이터를 조회
- hmset [key] [map-key1] [map-value1] [map-key2] [map-value2] ... : 다수의 Map 데이터를 저장
- hmget [key] [map-key1] [map-key2] ... : 다수의 Map 데이터를 조회
- hgetall [key] : 모든 Map 데이터를 조회
127.0.0.1:6379> hset emp:100 name kim
(integer) 0
127.0.0.1:6379> hget emp:100 name
"kim"
127.0.0.1:6379> hmset emp:101 name lee age 10 dept R&D
OK
127.0.0.1:6379> hmget emp:101 name dept
1) "lee"
2) "R&D"
127.0.0.1:6379> hgetall emp:101
1) "name"
2) "lee"
3) "age"
4) "10"
5) "dept"
6) "R&D"
Sets
Set은 위의 List와 유사하지만 순서가 없는 배열이고, 중복 데이터가 허용되지 않습니다.
- sadd [key] [value1] [value2] ... : set에 데이터를 입력
- smembers [key] : set이 모든 데이터를 조회
- sismember [key] [value] : 특정 값이 해당 set이 포함되어 있는지 여부 (포함 시 1 리턴)
- spop [key] : 랜덤 하게 1개의 데이터를 꺼냄
- scard [key] : set의 길이를 리턴
127.0.0.1:6379> sadd set1 1 2 3
(integer) 3
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sismember set1 10
(integer) 0
127.0.0.1:6379> spop set1
"2"
127.0.0.1:6379> scard set1
(integer) 2
Sorted sets
Sorted Set은 value : score 쌍의 데이터로 이뤄진 Set으로 자동으로 정렬이 되어 조회되어, 검색어 순위나 조회수 순위 등 다양한 순위 데이터를 관리할 때 유용합니다.
- zadd [key] [score1] [value1] [score2] [value2] ... : score와 value로 구성된 데이터들을 입력
- zrange [key] [start] [stop] : 스코어가 낮은 순서대로 범위 내 데이터가 출력
- zrevrange [key] [start] [stop] : 스코어가 높은 순서대로 범위내 데이터가 출력
- zrank [key] [value] : 해당 데이터의 순위 리턴
- zrangebyscore [key] [min] [max] : min ~ max 안에 포함되는 스코어의 데이터를 출력
- zremrangebyscore [key] [min] [max] : min ~ max 안에 포함되는 스코어의 데이터를 삭제
127.0.0.1:6379> zadd sset1 10 kim 20 lee 30 park
(integer) 3
127.0.0.1:6379> zrange sset1 0 -1
1) "kim"
2) "lee"
3) "park"
127.0.0.1:6379> zrevrange sset1 0 -1
1) "park"
2) "lee"
3) "kim"
127.0.0.1:6379> zrank sset1 lee
(integer) 1
127.0.0.1:6379> zrangebyscore sset1 15 25
1) "lee"
127.0.0.1:6379> zremrangebyscore sset1 15 25
(integer) 1
이상으로 기본적인 레디스의 데이터 타입과 기본 명령어를 정리해 봤습니다. 더 다양한 명령어와 데이터 타입이 있는데 해당 내용은 https://redis.io/docs/ 에서 추가로 확인이 가능합니다.
참고 : https://redis.io/docs/data-types/tutorial/