본문 바로가기
DB/Redis

Redis 기본 정리

by COCO1337 2021. 1. 7.

Debian - Raspbian

sudo apt-get install redis-server

redis-cli

 

Redis 는 key-value 타입을 저장하는 것이 아닌 data structure 서버이다. 때문에 Redis는 다양한 값들을 저장할 수 있다.

 

Binary-safe strings

Lists - 삽입 순서에 따라 정렬되어있는 string 원소들의 컬렉션, linked-lists

Sets - 정렬되지 않았지만 유일한 키를 가짐

Sorted sets - Sets과 비슷하지만 모든 원소들이 정렬되어 있다.

Hashes - 연관된 값을 가진 필드, 필드와 값은 모두 strings, 루비나 파이썬의 hashes와 비슷

Bit array(bitmaps) - 비트의 배열을 string 값처럼 다룰수 있다. 각각의 비트를 수정하거나 삭제 가능

HyperLogLogs - ?

Streams - 추가만 가능한 맵 같은 엔트리.

 

Redis Keys

레디스의 키들은 binary safe 하다. 그렇기때문에 키를 바이너리 시퀀스처럼 사용할 수 있으며, empty string도 가능하다

아주 긴 키는 좋지 않다 - 키가 길면 메모리에도 좋지 않고 비교할 때에도 비용이 비싸진다. 이럴떄는 해시를 써서 줄일수 있다

너무 짧은 키도 좋지 않다 - "u1000flw"같은 키는 메모리를 적게 사용하겠지만 "user:1000:followers" 와 같이 글자를 조금 추가하더라도 읽기 쉽고 구분하기 쉽게 만드는 것이 더 좋을 수 있다. (상황에 따라서 적절히 선택)

Schema를 정하고 그것에 따라 정하는 것이 좋다

키 사이즈의 최대는 512MB

 

Redis Strings

Redis String 타입은 Redis의 키와 연관된 가장 간단한 값이다. Memcached에서 사용되는 유일한 데이터 타입이기도 하다.

 

SET/GET 명령어를 사용한다. set 명령어는 기존에 이미 존재하고있는 키의 값을 변경하거나 새로 추가할 때 사용한다. 값으로는 512MB가 넘지않는 strings(including binary data)이면 무엇이든 가능하다.

SET 명령어에 nx/xx 옵션을 사용할 수 있다. nx 옵션을 사용하면 이미 존재하는 키일 경우 실패하고, xx 옵션을 사용하면 존재하는 키의 값을 수정할 수 있다.

 

INCR 명령어는 키의 값(string)을 정수로 변환하고 1 증가시킨 뒤에 해당 키에 새로운 값으로 저장한다. INCRBY, DECR, DECRBY도 모두 비슷하게 동작한다.

INCR은 atomic 하기 때문에 레이스 컨디션에 들어가지 않는다. 싱글 스레드이기 때문에 애초에 명령어를 동시에 받을 수 없어 순서대로 처리한다.

 

GETSET 명령어를 사용하면 키의 값을 새로운 값으로 변경하고 기존의 값을 결과로 반환한다.

 

mset / mget 명령어를 사용해서 한 명령 안에 여러 키와 값을 저장하거나 불러올 수 있다.

mget을 사용하면 Redis는 값의 배열을 반환한다.

 

EXISTS 명령어로 주어진 키의 존재여부를 알 수 있다. 0이나 1을 반환하며 DEL 명령어로 해당 키와 연관된 값을 지우기 전까지 1을 출력한다.

DEL 명령어로 해당 키가 존재해서 지워지면 1 아니면 0이 반환된다.

 

TYPE 명령어로 키에 연관된 값의 타입을 알수있다

존재하지 않는 키에 대해서는 none을 반환한다

 

EXPIRE 명령어로 해당 키에 Timeout을 설정할 수 있다. 설정한 시간이 지나면 해당 키와 값은 삭제된다(사용자가 DEL 명령어를 사용한것과 동일)

타임아웃 시간은 초나 밀리초 단위로 정할 수 있고 만료 시간을 정하는 것이다. 서버는 해당 키가 삭제될 시간을 저장해둔다.

expire key 5로 key의 만료시간이 설정한시간 + 5초가 된다. 그래서 그 시간 이내에 get key를 했을 때에는 제대로 "some-value"가 나왔지만 만료시간이 지난 후에 get key를 했을때는 실패했다.

만료시간까지 가기 전에 PERSIST 명령어로 해당 만료시간을 삭제할 수 있고 키 생성과 동시에 만료시간을 정할 수 있다.

TTL 명령어로 해당 키가 만료까지 얼마나 남았는지 알 수 있고, 밀리초 단위로 사용하려면 PEXPIRE, PTTL 명령어를 사용한다.

 

 

반응형

'DB > Redis' 카테고리의 다른 글

Redis 외부접속 설정하기  (0) 2021.01.11
Redis 기본정리 5  (0) 2021.01.08
Redis 기본정리 4  (0) 2021.01.08
Redis 기본 정리3  (0) 2021.01.08
Redis 기본정리 2  (0) 2021.01.07

댓글