반응형
Redis 자료구조
- Strings : Binary-safe 한 기본적인 key-value 구조
- Lists : 삽입 순서에 따라 정렬된 문자열 요소 컬렉션을 보유
- Sets : 고유한 멤버 집합을 저장
- Sorted sets : 부동 소수점 점수로 정렬된 고유한 멤버 집합
- Hashes : 내부에 sub-key - value를 하나 더 가지는 데이터 구조
- Bit arrays(bitMaps) : Binary 로직과 상태를 저장하는 압축 데이터 구조
- HyperLogLogs : 일정한 메모리 크기에서 고유 값을 계산하는 데 사용되는 확률적 데이터 구조
- Streams : 고속 데이터 스트림(예:메시지 대기열)을 관리하기 위한 데이터 구조
Strings
- 값은 최대 512mb
- 단순 증감 연산에 좋음
- 명령어 리스트 : set, get, mset, mget, incr, decr, incrby, decrby
127.0.0.1:6379> set temp tt
127.0.0.1:6379> get temp
"tt"
127.0.0.1:6379> keys *
"temp"
// type 명령어로 타입 확인
127.0.0.1:6379> type temp
"string"
binary-safe 문자열이란?
- 데이터의 손실없이 null 바이트를 포함한 모든 byte 시퀀스를 저장, 처리, 조작할 수 있는 문자열 처리 방식
- 인코딩에 특화된 문자열을 읽는 것이 아니라 원시(raw) 바이트를 그대로 다룬다.
- 원시 바이트를 그대로 다루기 때문에 텍스트뿐만 아니라 이미지, 오디오, 직렬화된 객체 등의 처리도 가능하다.
binary-safe 하지 않다는 것은 무엇일까?
- 특정 인코딩(ASCII, UTF-8)으로 문자열을 다룬다.
- 특정 바이트 시퀀스가 특수 문자로 다뤄지거나 유효하지 않은 인코딩으로 다뤄져 바이너리 데이터를 저장하거나 조작하는 경우 문제가 발생할 수 있다.
binary-safe in redis
- text, number, binary data 등을 인코딩 걱정 없이 저장할 수 있다.
Lists
- array 형식의 데이터 구조, 데이터를 순서대로 저장
- 추가 / 조회 / 삭제하는 것은 O(1)의 속도를 가지지만, 중간 특정 index 값을 조회할 때는 O(n)의 속도를 가지는 단점이 있음
- Message queue로 사용하기에 적절하다.
- 명령어 리스트 : lpush, rpush, lpushx, rpushx, lrange, lindex, llen, lpop, rpop, lrem, ltrim
Sets
- 중복된 데이터를 담지 않기 위해 사용하는 자료구조
- 유니크한 key값
- 정렬되지 않은 집합
- 중복된 데이터를 여러 번 저장하면 최종 한 번만 저장된다.
- 명령어 리스트 : sadd, smove, smembers, scard, srandmember, sismember, sscan, spop, srem
Sorted Sets
- set에 score라는 필드가 추가된 데이터 형태
- 일반적으로 set은 정렬이 되어있지 않고 insert 한 순서대로 들어간다.
그러나 sorted set은 set은 set의 특성은 그대로 가지며 추가적으로 저장된 멤버들의 순서도 관리한다. - 데이터를 저장할때부터 score 순으로 정렬되어 저장
- 오름차순으로 내부 정렬
- 명령어 리스트 : zadd, zrange, zrangebyscore, zrangebylex, zpopmin, zpopmax, zrem, zincrby
Hashes
- field-value로 구성되어 있는 전형적인 hash 형태
- key 하위에 subkey를 이용해 추가적인 Hash Table을 제공하는 자료구조
- 명령어 리스트 : hset, hmset, hsetnx, hget, hmget, hlen, hkeys, hvals, hdel, hincrby, hincrbyfloat
# 한개 값 삽입 및 삭제
hset <key> <subkey> <value>
hget <key> <subkey>
# 여러 값 삽입 및 삭제
hmset <key> <subkey> <value> <subkey> <value> ...
hnget <key> <subkey> <subkey> <subkey> ...
# 모든 subkey와 value 가져오기, Collection에 너무 많은 key가 있으면 장애의 원인이 됨
hgetall <key>
# 모든 value값만 가져오기
hvlas <key>
# field - value : name - jinmin / year - 1995 / month - 3
127.0.0.1:6379> hset hh name jinmin year 1995 month 3
(integer) 3
127.0.0.1:6379> hget hh name
"jinmin"
127.0.0.1:6379> hget hh year
"1995"
127.0.0.1:6379> hdel hh year
(integer) 1
127.0.0.1:6379> hlen hh
(integer) 2
127.0.0.1:6379> hgetAll hh
1) "name"
2) "jinmin"
3) "month"
4) "3"
127.0.0.1:6379> hkeys hh
1) "name"
2) "month"
127.0.0.1:6379> hvals hh
1) "jinmin"
2) "3"
Bitmaps
- bitmaps은 string의 변형
- bit 단위로 연산 가능
- String이 512mb 저장할 수 있듯이 232bit까지 사용 가능하다.
- 명령어 리스트 : getbit, setbit, bitcount, bitop, bitpos
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
레디스(Redis) TTL 설정하기 (0) | 2024.04.23 |
---|---|
StackExchange.Redis Subscribe()로 구독하기 (0) | 2023.12.27 |
C# StackExchange.Redis로 Redis 사용하기 (6) | 2023.05.26 |
C# redis에서 Key들을 pattern으로 조회하기 (28) | 2023.05.25 |
트랜잭션 격리 수준(Transaction Isolation Level)에 대해서 (8) | 2023.05.10 |
댓글