
Redis 에서 지원하는 데이터 타입은 다음과 같다.
1) Strings
2) Lists
3) Sets
4) Hashes
5) Sorted Sets
6) Streams
7) Geospatial
8) Bitmaps
9) HyperLogLog
10) BloomFilter
append-only log 에 consumer groups 과 같은 기능을 더한 자료구조이다.append-only log 란 데이터베이스나 분산시스템에 주로 사용되는 데이터 저장 알고리즘으로, 데이터가 수정되거나 삭제되지 않고 항상 추가만 되는 구조를 갖는다.stream 에 추가되는 이벤트 또는 메시지는 unique id 를 갖는다. unique id 는 스트림에 추가되는 시간과 순서를 기준으로 Redis 에 의해 자동으로 할당된다. 이러한 unique id 를 통해 하나의 entry 를 읽을 때, O(1)의 시간 복잡도를 갖게된다.consumer 에서 안전하게 메시지를 consuming 할 수 있도록 Consumer Group 이라는 기능이 포함되어 있다. ( Consumer Group 을 통해 분산 시스템에서 다수의 consumer 가 event 처리 )

XADD 명령어를 통해 Stream 에 entry 를 추가할 수 있다. 이후 * 옵션을 주면 Redis에 의해 자동으로 unique id 가 할당된다. 이후에 hash 와 같은 field value 형태로 메시지를 구성할 수 있다.XADD events * action like user_id 1 product_id 1events 라는 stream 를 생성했다. (하나의 이벤트를 스트림에 추가)* 옵션을 줘서, unique id 를 자동으로 할당한다.XADD events * action like user_id 2 product_id 1XRANGE 명령어를 이용하면 List 와 유사하게 다수의 메시지를 조회할 수 있다.XRANGE events - +XDEL 명령어를 이용하면 Stream 에서 제거할 수 있다.XDEL events UniqueID

GEOADD seoul:station 126.923917 37.556944 hong-dae 127.027583 37.497928 gang-namGEOADD 를 이용하여 좌표를 저장할 수 있다.GEODIST seoul:station hong-dae gang-nam KMGEODIST 명령어를 이용하여 역 간의 거리를 구할 수 있다. ( 이때, 옵션을 통해 출력하는 단위를 지정할 수 있다. )
String 에 binary operation 을 쉽게 사용할 수 있도록 만들어 놓은 인터페이스라고 생각하면 된다. ( String 에 binary operation 을 적용한 것 )
SETBIT user:login-in:23-01-01 123 1SETBIT user:login-in:23-01-02 456 1SETBIT user:login-in:23-01-02 123 1SETBIT 명령어를 이용해서 user:login-in:23-01-01 라는 key로, 123 이라는 offset에 value를 1로 설정했다. ( SETBIT key offset value )value 에는 기본적으로 0 이 들어간다. ( 여기서 value 는 로그인 여부로 사용한다고 가정 )BITCOUNT user:login-in:23-01-01BITCOUNT 를 이용하면 2023년 1월 1일에 로그인한 유저를 출력할 수 있다.BITOP AND result user:login-in:23-01-01 user:login-in:23-01-02BITOP 명령어에 AND 를 이용하면 1일과 2일에 모두 로그인한 유저를 확인할 수 있다.AND 연산을 통해서 result 에 저장GETBIT result 123GETBIT 를 이용해서, result 에서 123번 오프셋 데이터를 출력한다.GETBIT result 456BITCOUNT result
cardinality 를 추정할 수 있는 확률형 자료구조이다.
PFADD fruits apple orange graph kiwiPFADD 명령어를 이용하면 HyperLogLog 에 멤버를 추가할 수 있다.fruits 라는 key 로 apple orange graph kiwi 를 추가한다.PFCOUNT fruitsPFCOUNT 명령어를 통해서 fruits HyperLogLog 의 cardinality 를 출력할 수 있다.
for (( i = 1; i <= 1000; i++ )); do redis-cli SADD k1 $i; donek1 의 메모리 사용: 40296 바이트 사용cardinality: 1000
for (( i = 1; i <= 1000; i++ )); do redis-cli PFADD k2 $i; donek2 의 메모리 사용: 2608 바이트 사용cardinality: 1001
BloomFilter 는 HyperLogLog 와 마찬가지로 확률형 자료구조의 일종이다.BloomFilter 는 element 가 특정한 집합 안에 포함되었는지 여부를 확인할 수 있는 확률형 자료 구조이다. ( 흔히 membership test 라고 불리는 기능을 구현할 때 자주 사용된다. )BloomFilter 는 HyperLogLog 와 마찬가지로 정확성을 일부 포기하는 대신 저장공간을 효율적으로 사용한다.BloomFilter 는 element 가 집합에 포함되지 않는다는 사실은 정확하게 확인할 수 있지만, 집합에 포함되지 않는 값이 존재한다고 잘못 말하는, false positive 를 반환하는 경우가 있다.BloomFilter 는 실제 값을 저장하지 않기 때문에 (Set에 비해) 매우 적은 메모리를 사용한다.BloomFilter 데이터 저장 원리)
BloomFilter 는 값을 해싱하여 여러개의 해시 키를 만들어낸다. 그리고 여러개의 키에 해당하는 위치를 BloomFilter 에 표시한다.wiki 에서 false positive 가 발생한다.BF.MADD 명령어를 통해서 집합에 아이템을 추가할 수 있다.BF.MADD fruits apple orangeBF.EXISTS 명령어를 통해서 특정 아이템이 집합에 이미 포함되어 있는지 여부를 확인할 수 있다.BF.EXISTS fruits apple강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 신동현 강사님께 있습니다.
( https://inf.run/BQH4z )