일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- vue
- Kotlin
- SWIFT
- 코틀린
- file upload
- 반복문
- 개발자
- node.js
- 개발이 취미인 사람
- 상속
- javascript
- java
- props
- It
- swagger
- state
- spring boot
- restful api
- jpa
- AWS
- react
- Sequelize
- component
- back-end
- class
- kafka
- Nest.js
- front-end
- 조건문
- Producer
- Today
- Total
개발이 취미인 사람
[Redis] 자료구조 개념 및 사용법 본문
- 개요
안녕하세요. 이번 시간에는 Redis에서 사용하는 각 자료구조에 대해 알아보겠습니다.
기본적으로 Redis는 Open Source이며, In-Memory Data Store라고 Cache 서버라고 설명합니다.
In-Memory Cache 서버이기 때문에 기본적인 RAM에 데이터를 저장합니다.
속도가 빠르다는 이점이 있지만 컴퓨터가 종료되거나 서버가 장애가 발생해서 종료되는 경우 데이터를 보존하지 못하는 단점이 있습니다.
Redis 서버를 사용할 때 전략을 잘 구성해서 사용해야 합니다.
- 설명
Redis에서 사용되는 자료 구조는 Strings, Hashes, Lists, Sets, Sorted Sets 그리고 범위 쿼리를 검색할 수 있는 Bitmaps, Hyperloglogs, Geospatial indexes, 마지막으로 Streams과 같은 데이터 구조가 있습니다.
Redis는 자료를 저장할 때 Key/Value 형태로 저장합니다. Hash 자료 구조를 생각하면 어떤 식으로 형태로 저장하는지 딱 직감하실 겁니다.
- Strings(문자열)
String 자료형은 단순히 Key/Value 형태가 값을 저장합니다.
명령어
# 데이터 저장 (set key value)
127.0.0.1:6379> set user ryan
# 데이터 조회 (get key)
127.0.0.1:6379> get user
- Set(집합)
Set은 집합형 Data Type으로 정렬되지 않고 중복되지 않는 데이터를 저장합니다.
집합형 자료형이기 때문에 합집합, 교집합, 차집합과 같은 연산도 가능합니다.
명령어
# 데이터 저장 (sadd key value)
127.0.0.1:6379> sadd user ryan
# 다중 저장 (sadd key value value value)
127.0.0.1:6379> sadd user ryan ryan1 ryan2
# 데이터 조회 (smembers key)
127.0.0.1:6379> smembers user
집합
# 임시 데이터
127.0.0.1:6379> sadd user1 ryan1 ryan2 ryan3 ryan4
127.0.0.1:6379> sadd user2 ryan2 ryan3 ryan4 ryan5 ryan6
#차집합 연산 (user1에만 포함된 정보를 조회)
127.0.0.1:6379> sdiff user1 user2
ryan1
#차집합 연산 (user2에만 포함된 정보를 조회)
127.0.0.1:6379> sdiff user2 user1
ryan5
ryan6
#교집합 (user1과 user2 공통정보 조회)
127.0.0.1:6379> sinter user1 user2
ryan3
ryan4
ryan2
#합집합 (user1과 user2 정보를 합친다.)
127.0.0.1:6379> sunion user1 user2
ryan2
ryan3
ryan5
ryan1
ryan4
ryan6
-Sorted Set(정렬된 집합)
Set 자료구조는 value 값을 정렬하지 않는다. Sorted Set 자료구조는 Set 자료구조와 다르게 value 값을 score 기준으로 정렬합니다.
명령어
#데이터 저장(zadd key score value)
127.0.0.1:6379> zadd user 0 ryan
127.0.0.1:6379> zadd user 1 ryan2
127.0.0.1:6379> zadd user 2 ryan5
127.0.0.1:6379> zadd user 5 ryan3
127.0.0.1:6379> zadd user 4 ryan4
#데이터 전체 조회(zrange key 시작(score) 끝(score))
127.0.0.1:6379> zrange user 0 -1
ryan
ryan2
ryan5
ryan4
ryan3
- List(목록)
LIst 자료구조는 Linked List 형태여서 lpush, rpush 같은 List에 오른쪽과 왼쪽에 데이터를 저장할 수 있습니다.
그리고 Set과 다르게 중복된 데이터를 저장할 수 있습니다.
명령어
#데이터 저장(lpush/rpush key value)
127.0.0.1:6379> lpush user ryan
127.0.0.1:6379> rpush user ryan2
#데이터 조회(lrange key 시작(인덱스) 끝(인덱스))
127.0.0.1:6379> lrange user 0 10
LPUSHX / RPUSHX
LPUSHX / RPUSHX는 존재하는 Key에만 Push 작업이 가능하다.
Key가 없다면 데이터를 저장할 수 없습니다.
- Hash(Field/Value)
Hash구조는 우리가 생각하는 Hash 자료구조 성격을 가진다.
Redis는 기본적으로 Key/Value Store인데...? Hash가 있다? 이상할 수 있다고 생각하지만, 데이터를 저장하는 방식 중 하나라고 생각하면 이해를 할 수도 있다.
Redis Key 하나에 여러개의 Field와 Value가 존재한다. 객체 지향 언어를 사용해 보셨다면, Class에 Field 변수를 생각할 수 있습니다.
명령어
#데이터 저장(hset key field value)
127.0.0.1:6379> hset user name ryan
#데이터 조회(hget key field)
127.0.0.1:6379> hget user name
이번 시간에는 Redis에서 사용되는 자료 구조에 대해서 알아봤습니다.
'백앤드(Back-End) > Redis' 카테고리의 다른 글
[Redis] Redis 백그라운드 실행(Daemon & Systemd 실행) (1) | 2021.08.29 |
---|---|
[Redis] Redis Ubuntu 설치 및 실행 (0) | 2021.08.29 |