Redis Hash, Sorted Set 자료구조와 명령어
2023년 12월 04일Redis는 key-value외에도 다양한 자료구조를 지원한다. 유저별로 현재 작업중인 프로젝트에서 유저별 검색기록, 검색 랭킹 기능을 redis로 구현하면서 각각 필요한 redis 자료 구조를 선택해야했다. 유저별 검색기록에는 Hash 자료구조를 검색 랭킹에는 Sorted Sets 자료구조를 선택했다. 유저별로 시간, 검색어, 검색 형태를 값을 구조화해서 저장해야해서 hash 구조가 필요했고, 검색 랭킹은 각각 값이 중복되어 저장되지 않고, 각 값에 대한 점수를 부여할 수 있었기에 Sorted Sets를 선택했다.
Hash
hash는 Javascript의 object형태라고 보면 된다. Redis Hash는 key-field-value 형태로 되어 있는데 이렇게 대응해서 보면 된다.
- key : js object 변수 이름
- field : js object의 key
- value : js object의 value
성능
O(1)
- HKEYS, HVALS, HGETALL과 같은 명령은
O(n)
Hash 명령어
HSET key field value
key에 field:value를 저장HMSET key field value [field value …]
여러 field:value를 저장HGET key field
field로 value 조회HMGET key field
여러 field의 value 조회HKEYS key
key의 모든 field 조회HVALS key
key의 모든 value 조회HGETALL key
key의 모든 field value 조회HDEL key field [field…]
key에 field 삭제HLEN key
key의 field 개수 조회
Ref
- Hash 데이터 타입 : https://redis.io/docs/data-types/hashes/
- Hash 명령어 모음 : https://redis.io/commands/?group=hash
Sorted Sets
1)순서가 정렬된 + 2)배열이라고 생각하면 된다. 각 배열의 요소에는 score가 있어서 score에 따라 정렬된다. 원할 경우 score는 원하는 값만큼 증가, 감소시킬 수 있고. 전체 배열을 뽑아볼 때 score도 같이 뽑아볼 수 있다.
성능
O(log(n))
- 반환 값이 큰 경우(예: 수만 개 이상)에는 ZRANGE 명령을 실행할 때 주의해야한다. 이 명령의 시간 복잡도는
O(log(n) + m)
(*m 반환되는 결과의 개수)
Sorted Sets 명령어
ZADD key score member [score member...]
배열에 score와 member 추가ZRANGE key start stop [withscores]
index로 범위를 지정해서 배열 조회ZRANGESCORE key min max [withscores]
score min~max 범위의 배열 조회ZRANK key member
member의 rank를 조회ZREVRANK key member
member의 rank를 조회 반대로ZINCRBY key increment member key
의 member score 증가, 감소ZUNION numkeys key [key ...]
key들의 합해서 하나의 배열로ZUNIONSTORE dest_key numkeys src_key [src_key ...]
key들의 합해서 하나의 배열로 해서 dest_key에 저장ZREM member [member…]
집합에서 member 삭제ZREMRANGEBYSCORE key min max
집합에서 score 기준으로 member 삭제
Ref
- Sorted Set 데이터 타입 : https://redis.io/docs/data-types/sorted-sets/
- Sorted Set 명령어 모음 : https://redis.io/commands/?group=hash
TAGS
REDIS