본문으로 바로가기

[Redis] 요점정리

category Database/Redis 2020. 12. 17. 22:12

개요

Redis 는 In Memory 기반의 NoSQL Database 이며, 다양한 데이터 타입을 제공한다.

 

데이터 타입


String (문자열)

문자열은 정수(integer) 또는 부동소수점(float), 텍스트 문자열, 비트맵 값이 기반이고, 연관 커맨드를 사용함으로써 동작한다.문자열은 텍스트(XML, JSON, HTML, 원문텍스트)나 정수, 부동소수점, 바이너리 데이터(비디오, 오디오, 이미지)와 같이 어떠한 종류의 데이터라도 저장이 가능하며 512MB를 초과할 수 없다.

  • 캐시 매커니즘 : HTML 페이지와 API 응답에서 이미지, 비디오까지 어떠한 텍스트 또는 바이너리 데이터라도 캐시할 수 있다.
    SET, GET, MSET, MGET 커맨드를 이용해 간단한 캐시 시스템을 구현할 수 있다.
  • 자동 만료되는 캐시 : 키의 만료를 자동으로 지원하는 문자열은 SETEX, EXPIRE, EXPIREAT 커맨드를 이용해 튼튼한 캐시 시스템을 만들 수 있다.
  • 개수계산(count) : 문자열과 INCR, INCRBY 커맨드를 이용해 쉽게 구현 가능한 개수 계산이다. 페이지뷰, 비디오뷰, 좋아요 같은 개수계산이 좋은 예시다. 문자열은 DECR, DECRBY, INCRFLOATBY 와 같은 개수 계산 커맨드도 제공한다.
# MSET, MGET, DEL
127.0.0.1:6379> MSET first cwlee second hmyang
OK
127.0.0.1:6379> MGET first second
1) "cwlee"
2) "hmyang"
127.0.0.1:6379> DEL first second
(integer) 2
127.0.0.1:6379> MGET first second
1) (nil)
2) (nil)


# GET, SET, EXPIRE, TTL
127.0.0.1:6379> SET current_chapter "Chapter 1"
OK
127.0.0.1:6379> GET current_chapter
"Chapter 1"
127.0.0.1:6379> TTL current_chapter
(integer) -1
127.0.0.1:6379> EXPIRE current_chapter 10
(integer) 1
127.0.0.1:6379> TTL current_chapter
(integer) 4
127.0.0.1:6379> TTL current_chapter
(integer) 3
127.0.0.1:6379> TTL current_chapter
(integer) -2
127.0.0.1:6379> GET current_chapter
(nil)

# INCR, INCRBY, DECR, DECRBY, INCRBYFLOAT
127.0.0.1:6379> SET p_idx 0
OK
127.0.0.1:6379> GET p_idx
"0"
127.0.0.1:6379> INCR p_idx
(integer) 1
127.0.0.1:6379> INCR p_idx
(integer) 2
127.0.0.1:6379> INCR p_idx
(integer) 3
127.0.0.1:6379> GET p_idx
"3"
127.0.0.1:6379> INCRBY p_idx 10
(integer) 13
127.0.0.1:6379> DECR p_idx
(integer) 12
127.0.0.1:6379> DECR p_idx
(integer) 11
127.0.0.1:6379> DECRBY p_idx 10
(integer) 1
127.0.0.1:6379> INCRBYFLOAT p_idx 5.5
"6.5"

※ 그외 커맨드

  • EXPIRE : 키의 만료시간을 지정한다.

List (리스트)

리스트는 간단한 컬렉션, 스택, 큐와 같이 동작할수 있다. 
Redis의 리스트는 연결리스트(linked list)라서 리스트의 처음 또는 끝에서 엘리먼트의 추가 및 삭제는 항상 O(1), 일정 시간의 성능을 가진다.

  • list-max-ziplist-value (설정값)
  • list-max-ziplist-entries
# LPUSH, RPUSH, LLEN, LINDEX
127.0.0.1:6379> LPUSH queue "value1"
(integer) 1
127.0.0.1:6379> LPUSH queue "value2"
(integer) 2
127.0.0.1:6379> RPUSH queue "value3"
(integer) 3

127.0.0.1:6379> LLEN queue
(integer) 3
127.0.0.1:6379> LINDEX queue 0
"value2"
127.0.0.1:6379> LINDEX queue 1
"value1"
127.0.0.1:6379> LINDEX queue 2
"value3"

# LRANGE, LPOP, RPOP
127.0.0.1:6379> LRANGE queue 0 1
1) "value2"
2) "value1"
127.0.0.1:6379> LRANGE queue 0 -1
1) "value2"
2) "value1"
3) "value3"
127.0.0.1:6379> LPOP queue
"value2"
127.0.0.1:6379> LRANGE queue 0 -1
1) "value1"
2) "value3"
127.0.0.1:6379> RPOP queue
"value3"
127.0.0.1:6379> LRANGE queue 0 -1
1) "value1"

※ 그외 커맨드

 

  • BRPOP : 리스트에 데이터가 이미 있을 경우에는 RPOP와 같다. 데이터가 없을 경우에는 timeout(초) 만큼 기다린다.
    timeout이 0일때, 데이터가 입력될때까지 기다린다. 데이터가 들어오면 pop을 하고 key, data, 시간(초)를 표시한다

Hash (해시)

해시는 필드를 값으로 매핑할 수 있기 때문에, 객체를 저장하는 데 훌륭한 데이터 구조다.
해시는 메모리를 효율적으로 쓸 수 있고, 데이터를 빨리 찾을 수 있게 최적화돼 있다. 
해시에서 필드 이름과 값은 문자열이다. 따라서 해시는 문자열을 문자열로 매핑한다.

  • hash-max-ziplist-entries
  • hash-max-ziplist-value
# HSET, HMSET, HINCRBY, HGET, HMGET, HGETALL, HDEL, HKEYS, HVALS

127.0.0.1:6379> HSET movie "title" "The Godfather"
(integer) 1
127.0.0.1:6379> HMSET movie "year" 1972 "rating" 9.2 "watchers" 10000
OK
127.0.0.1:6379> HINCRBY movie "watchers" 3
(integer) 10003
127.0.0.1:6379> HGET movie title
"The Godfather"
127.0.0.1:6379> HMGET movie title watchers
1) "The Godfather"
2) "10003"
127.0.0.1:6379> HGETALL movie
1) "title"
2) "The Godfather"
3) "year"
4) "1972"
5) "rating"
6) "9.2"
7) "watchers"
8) "10003"
127.0.0.1:6379> HDEL movie watchers
(integer) 1
127.0.0.1:6379> HKEYS movie
1) "title"
2) "year"
3) "rating"
127.0.0.1:6379> HVALS movie
1) "The Godfather"
2) "1972"
3) "9.2"
127.0.0.1:6379>

 

패스워드 설정

redis.conf 파일의 주석처리된 아래 구문을 찾아서 주석을 해제하고 foobared 부분에 원하는 패스워드를 입력한다.

입력 후 Redis 를 재시작 한다.

외부 접속을 허용하고자 하는 경우 bind 구문을 찾아 127.0.0.1 로 설정된 부분을 삭제하고 0.0.0.0 으로 수정한다.

# requirepass foobared

로그인 : redis-cli -h <redis 서버 ip> -p <redis port> -a <password>

  • auth [username] password
  • login username password