without haste but without rest

레디스 시작하기 with docker 본문

Database/Redis

레디스 시작하기 with docker

JinungKim 2021. 7. 25. 16:28

 

 

Introduction to Redis – Redis

*Introduction to Redis Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hype

redis.io


0. 개요

  빠르게 레디스를 사용하고 경험해볼 수 있는 내용의 포스팅. 실습은 도커를 활용함. 레디스를 활용하면서 알게 된 팁이 생기면 해당 게시글에 추가적인 업데이트를 진행함


1. 레디스?

  레디스는 인-메모리 key-value 기반 자료구조 저장소로 데이터베이스, 캐쉬, 메시지 브로커 등으로 사용할 수 있다.

 

개인적으로는 캐쉬 용도로 활용하는 것을 선호하고 있다. 아무래도 메모리 기반 저장소라 안정성을 우려할 수 밖에 없고, 메시지 브로커는 카프카라는 좋은 미들웨어가 있다. 결국 인메모리 기반 스토어는 속도 측면에서의 장점을 갖는데 캐쉬는 데이터의 보존을 완벽하게 보장하지 않아도 된다. 예를 들어  실시간 파이프라인이 아니라서 속도 측면에서 여유가 있는 경우 스키마 설계 단계에서 primary key, unique key 등을 지정하고 데이터 수집 - 적재 과정에서 중복 데이터 처리를 위한 스토리지로 적극 활용하고 있다. 

 

레디스가 제공하는 기본적인 자료형

 

  • strings - 레디스에서 가장 단순한 자료형으로 문자열로 이루어진 키, 밸류를 가진다.
  • lists - linked list로 구현된 자료형으로 데이터를 앞 뒤로 추가하는 것은 빠르지만 인덱싱이 불가능하다.
  • hashes - 값-필드 쌍을 이용하는 해쉬인데, 필드에는 여러 개의 값을 저장할 수 있다.
  • sets - 정렬되지 않은 문자열 집합으로 여러 sets간의 교집합, 합집합 등의 연산이 가능함
  • sorted sets - 특정 값으로 정렬하는 sets 

2. 실습

(0) 레디스 컨테이너 시작

# 레디스 컨테이너 시작
docker run -itd --name redis -p 6379:6379 redis

# 컨테이너 접근
docker exec -it redis bash

# 레디스 접속
redis-cli

 


  기본적으로 레디스 명령어는 명령어/저장소/필드 형태로 전개된다. 

 

(1) strings

> set mykey somevalue
OK
> get mykey
"somevalue"

set key value 형태로 값을 저장하고 get key 형태로 값을 가져올 수 있다. 저장된 키가 아니라면 null을 리턴한다. 


 

(2) lists

linked list로 구현한 저장형태로 리스트 내부에 데이터 1000만 개가 있더라도 앞, 뒤에 데이터를 추가하는 시간은 동일하다. 하지만 링크드 리스트 구조이기 때문에 데이터 조회 측면에서 Array에 비해 느리다. 이용 사례로는 트위터에서 유저가 게시한 최신 트윗을 redis 목록으로 가져온다고 함 

> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"

 

lpush, rpush로 데이터를 삽일할 수 있으며  lrange로 범위를 지정해서 데이터를 가져올 수 있다.

 

> rpush mylist a b c
(integer) 3
> rpop mylist
"c"
> rpop mylist
"b"
> rpop mylist
"a"

rpop, lpop 커맨드로 데이터를 뽑아올 수 있다. 


(3) hashes

> hmset user:1000 username antirez birthyear 1977 verified 1
OK
> hget user:1000 username
"antirez"
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "1"

해쉬 키를 이용해서 필드'들'을 저장할 수 있다. hmset 명령어를 이용해서 user:1000 키에 username 필드에 antirez라는 값을, birthyear라는 필드에 1977을 verified 필드에 1을 저장했다.

 

 

마치 아래 json 형태처럼 저장하는 듯?

"user": 1000 {
	"username": "antirez",
    	"birthyear": 1977,
    	"verified": 1,
}

 

 

(4) sets

> sadd myset 1 2 3
(integer) 3
> smembers myset
1. 3
2. 1
3. 2

파이썬의 set자료형처럼 순서는 보장하지 않되 중복은 허락하지 않는다. (2020.07.25. 기준으로 순서가 보장이 되는데.. 해당 내용 찾아서 추가) 

 

> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0

sismember 명령어로 요소가 존재하는지 확인할 수 있다. 3은 myset sets에 포함되어 있지만 30은 아니다. 

 

> sadd tag:1:news 1000
(integer) 1
> sadd tag:2:news 1000
(integer) 1
> sadd tag:5:news 1000
(integer) 1
> sadd tag:77:news 1000
(integer) 1

 

> smembers news:1000:tags
1. 5
2. 1
3. 77
4. 2

태그를 구현하기 위해서 세트를 사용할 수 있다. 한 가지 예로 뉴스 기사에 태그를 지정할 수 있다. 뉴스 ID  1000에 태그 1, 2, 5, 77이 태그된 경우 sets는 tag id를 뉴스 항목과 연결할 수 있다.

 

 

(5) sorted sets

sets와 hashes의 혼합과 유사한 데이터 유형이다. sets와 마찬가지로 고유한 문자열 요소로 이루어져있다. sets 내부의 요소는 정렬되어 있지 않지만 sorted sets은 score라고 하는 값과 연결된다. 예를 들어서 A와 B가 점수가 다른 두 요소면 A.score > B.score 라면 A > B 순서다.

> zadd hackers 1940 "Alan Kay"
(integer) 1
> zadd hackers 1957 "Sophie Wilson"
(integer) 1
> zadd hackers 1953 "Richard Stallman"
(integer) 1
> zadd hackers 1949 "Anita Borg"
(integer) 1
> zadd hackers 1965 "Yukihiro Matsumoto"
(integer) 1
> zadd hackers 1914 "Hedy Lamarr"
(integer) 1
> zadd hackers 1916 "Claude Shannon"
(integer) 1
> zadd hackers 1969 "Linus Torvalds"
(integer) 1
> zadd hackers 1912 "Alan Turing"
(integer) 1

zadd 명령어로 sorted sets hackers에 출생년도, 이름을 삽입한다.

 

> zrange hackers 0 -1
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Claude Shannon"
4) "Alan Kay"
5) "Anita Borg"
6) "Richard Stallman"
7) "Sophie Wilson"
8) "Yukihiro Matsumoto"
9) "Linus Torvalds"

출생년도를 오름차순으로 정렬된 것을 확인할 수 있다. 


Appendix. 레디스 운영 및 활용에 대한 더 자세한 자료

 

강대명님의 우아한 redis 강의

기초적인 내용은 빠르게 넘어가고 운영 측면에서 중요한 내용을 다룬다.

 

 


Redis 운영관리 

 

Redis 운영 관리 - YES24

Redis는 데이터를 빠르게 처리한다는 성능적인 장점과 함꼐 큰 기업에서 사용할 정도로 안정성이 검증되어 많은 곳에서 사용하고 있다. 하지만 Redis를 어떻게 사용하는지 제대로 알지 못한 상태

www.yes24.com

구글링 해보니 이 책 괜찮다고 해서 추후에 레디스를 더 깊게 써볼 일이 있다면 읽어보기

알고보니 이 책 저자가 위 영상 개발자분.. 

Comments