하나의 key(자료구조)에 대해 여러 field - value의 쌍을 가짐
주로 하나의 객체를 표현하는 데 사용
따라서 \0, 즉 널 문자를 포함하더라도 binary safe하다
어떤 데이터든 저장할 수 있는 것이다
레디스에서 해시의 인코딩 방식은 크게 두 종류이다
list pack의 경우
이와 같은 두 조건 중 하나를 위반 시
hash table을 활용해 인코딩하게 된다
그러나 list와 다르게 모든 요소 조회 없이 hash 함수를 거쳐 O(1)로 요소를 검색 가능
string을 사용 시 같은 사용자에 대해 정보를 저장 시
user:1000:name
user:1000:age
user:1000:email
이와 같이 각자 문자열을 저장하며, 해당 문자열에 대해 메타데이터를 포함하는 헤더를 함께 저장해야한다
그러나 hash 의 경우
hset user:1000 name Alice age 20
와 같이 동시에 저장 가능하다
hset : hash에 대해 field value 설정
hget : hash의 key, field value 조회
hget user:1000 name
hmset (deprecated)
set을 통해 동시에 여러 field 추가 가능하기 때문에 hset을 권장
hmget : 배열 반환
일일히 get하는 것보다 효율적임(네트워크 전송 시)
hmget user:1000 name email age
*이와 같이 여러 필드 - value 대상 set, get 시 레디스는 싱글 스레드 기반임에 따라 원자성을 보장해줌
hincrby, hincrbyfloat : 증가 연산
hexists : field 존재 유무 확인
hkeys : 모든 필드 반환 (순서 보장 안됨)
hvals : 모든 value 반환