Data Type
Strings
문자열, 숫자, serialized object(JSON string)등 저장
SET name redis → name = "redis"
MSET name pencil price 100 → name = "pencil", price = "100"
MGET name price → 1) "pencil" 2) "100"
redis는 숫자도 문자형으로 저장한다 대신 문자형 숫자는 사칙연산이 가능하다.
INCR price → price + 1
INCRBY price 100 → price + 100
redis에서는 변수명에 :을 사용하여 의미별로 구분을 해주면 좋다
SET professor:database:ko mr.kim
Lists
String을 Doubly Linked List로 저장
LPSUH que pasta ramen noodle → que에 "pasta", "remen", "noodle"이 추가 된다
RPUSH queR noodle ramen pasta
LPOP que → 왼쪽 값을 제거 (pasta)
RPOP que → 오른쪽 값을 제거 (noodle)
redis의 list의 index는 왼쪽부터 0으로 증가하고 오른쪽 부터 -1에서 감소한다.
LPUSH que pasta ramen noodle
LRANGE que -2 -1 → 1) "b" 2) "a"
LTRIM que 0 1 → 0~1 의 인덱스 값만 남기고 지워라
LLEN que → 2 길이를 출력한다.
Sets
SADD user:1:menu pasta ramen noodle noodle → noodle은 중복이라 하나만 포함된다
SMEMBERS user:1:menu → 1) "pasta" 2) "ramen" 3) "noodel"
SCARD user:1:menu -> 3 집합의 멤버 개수를 알려준다
SISMEMBER user:1:menu pasta → 1 들어있으면 1
SISMEMBER user:1:menu rice → 0 없으면 0
SREM user:1:menu pasta -> 1 pasta를 user:1:menu에서 삭제
집합의 연산
SINTER A B
SDIFF A B
SUNION A B
Hashes
HSET menu name pasta price 10000 location Italy
HGET menu name → "pasta"
HMGET menu name price → 1) "pasta" 2) "10000"
HGETALL menu → 1) "name" 2) "pasta" 3) 'price" 4) "10000" 5) "locatoin" 6) "Italy"
HINCRBY menu price 10 -> 10010
Sorted Sets
Sorted Set은 score라는 field에 의해 정렬되는 집합이다. score가 동일 할때는 사전순 정렬이다.
ZADD points 1 a 2 b 1 c 4 d
ZREM d → d를 삭제한다
ZRANGE points 0 -1 → 1) "a" 2) "c" 3) "b"
옵션으로 rev 와 withscores가 있다
ZRANGE points 0 -1 rev → 1) "b" 2) "c" 3) "a"
ZRANGE points 0 - 1 withscores 1) "a" 2) "1" 3) "c" 4) "1" 5) "b" 6) "2"
ZRANK points a → 0
ZREVRANK points b → 0 역등수를 반환한다
Steams
append-only log에 consumer groups 과 같은 기능을 더한 자료 구조
O(1)의 속도를 가진다.
XADD race:korea * rider kim speed 10 position 1 → "1692632086370-0"
XADD race:korea * rider park speed 7 position 2 → "1692632094485-0"
XRANGE race:korea - + → XRANGE <steam-key> <start-id> <end-id> [COUNT <count-num>]
1) 1) "1692632086370-0"
2) 1) "rider"
2) "kim
3) "speed"
4) "10"
5) "position"
6) "1"
2) 1) "1692632094485-0"
2) 1) "rider"
2) "park"
3) "speed"
4) "7"
5) "position"
6) "2"
XDEL race:korea 1692632086370-0
XLEN race:kore → 1
Geospatial
좌표를 저장하고 검색하는 데이터 타입
GEOADD seoul:univ 126.936496254 37.559497762 kookmin 1 2 tmp
GEODIST seoul:univ kookmin tmp <KM|M|MI|FT> -> 거리 차이가 출력된다
Bitmaps
Bitmaps는 실제로 존재하는 데이터 타입이 아니고 String 타입에 bit연산이 포함된 기능이다.
SETBIT user:log-in:24-01-01 1000 1
SETBIT user:log-in:24-01-01 1001 1
SETBIT user:log-in:24-01-02 1000 1
BITCOUNT user:log-in:24-01-01 → 2
BITCOUNT user:log-in:24-01-02 → 1
BITOP <AND|OR|NOT|XOR> result user:log-in:24-01-1 user:log-in:24-01-02 → result에 and연산이 적영된 값이 들어간다
GETBIT result 1000 → 1
GETBIT result 1001 → 0
HyperLogLog
집합의 cardinality를 추정할 수 있는 확률형 자료구조이다.
정확성을 포기하고(0.81% 오차) 저장공간을 효율적으로 사용한다.
PFADD menu pasta ramen noodle
PFCOUNT menu → 3
https://redis.io/docs/data-types/
https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-redis-%ED%99%9C%EC%9A%A9/
'computer science > DB' 카테고리의 다른 글
[데이터 중심 애플리케이션 설계] 7장. Write에서의 동시성 문제 (0) | 2024.07.14 |
---|---|
[데이터 중심 애플리케이션 설계] 7장. Isolation Level (0) | 2024.06.30 |
하나의 트랙잭션에서 insert 다음에 나오는 select 쿼리는 insert된 결과를 가지고 있을까? (0) | 2024.06.23 |
[데이터 중심 애플리케이션 설계] ACID에서 애플케이션과 DB의 책임 분리 (1) | 2024.06.23 |
DBCP(DB connection pool) (0) | 2023.11.04 |