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

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


TAGS
REDIS