Redis

Redis - Hashes

개발 일기92 2024. 6. 16. 17:10

소개

Field와 value로 구성?

Hashes는 key 하나에 여러개의 field와 value로 구성됩니다.
key 하나에 field와 value 쌍을 40억개(4,294,967,295)까지 저장 가능합니다.

 

Table과 Hash의 유사한 점

Hashes가 field와 value로 구성된다는 면에서 RDB의 table과 비슷합니다.
Hash key는 table의 PK, field는 column, value는 value로 보면 됩니다.
Key가 PK와 같은 역할을 하기 때문에 key 하나는 table의 한 row와 같습니다.

 

Table과 Hash의 다른 점

Table의 column 수는 일반적으로 제한이 있는 반면, Hash의 field 수는 40억개로 거의 무제한에 가깝습니다.
Table에서 column을 추가하려면 alter문으로 미리 table을 변경해야 하나, Hash에서는 그런 사전 작업이 필요없습니다. 따라서 field의 추가/삭제는 자유롭습니다. Field의 추가/삭제는 해당 key에만 영향을 미칩니다.

 

 

명령어 요약

  • SET: HSET, HMSET, HSETNX
  • GET: HGET, HMGET, HLEN, HKEYS, HVALS, HGETALL, HSTRLEN, HSCAN, HEXISTS
  • REM: HDEL
  • INCR: HINCRBY, HINCRBYFLOAT

1. HSET key field value : key에 값 저장.

HMSET key field1 value1 field2 value2 ... : 여러개 저장.

 

key에 여러개의 field와 value를 저장할 수 있다.

기존에 같은 field가 있으면 덮어쓴다.

RDB와 비슷하다. but! key마다 field가 달라도 된다.

명령>	hset user-1 email charlie@redisgate.com
결과>	1
명령>	hset user-1 language english
결과>	1
명령>	hset user-1 gender m
결과>	1
명령>	hgetall user-1
결과>	0) email -> charlie@redisgate.com
1) language -> english
2) gender -> m

 

4.0버전부터 field와 value를 여러개 입력할 수 있다.

명령>	hset myhash f1 v1 f2 v2
결과>	2

HSET key field value [field value ...]


2. HDEL key field : field, value 삭제.

field 여러개 지정 할 수 있다.

명령>	hgetall user-1
결과>	0) email -> charlie@redisgate.com
1) language -> english
2) gender -> m
명령>	hdel user-1 language
결과>	1
명령>	hdel user-1 email gender
결과>	2

3. HGET key field : field로 value 조회.

HMGET key field1 field2 : 여러개 조회.

HGETALL key : key에 속한 모든 field와 value조회.

명령>	hgetall user-1
결과>	0) email -> charlie@redisgate.com
1) language -> English
2) gender -> m
명령>	hget user-1 language
결과>	English
명령>	hget user-1 email
결과>	charlie@redisgate.com

4. HLEN key : field의 개수 조회.


5. HKEYS key : key에 속한 모든 field name 조회.

field name은 입력된 순서대로 조회됨.

명령>	hkeys user-1
결과>	1) email
2) language
3) gender
명령>	hmset user-2 gender f name sally language Korean
결과>	3
명령>	hkeys user-2
결과>	1) gender
2) name
3) language

6. HVALS key

value는 입력된 순서대로 조회됨.

명령>	hvals user-1
결과>	1) charlie@redisgate.com
2) English
3) M
명령>	hmset user-2 gender F name Sally language Korean
결과>	3
명령>	hvals user-2
결과>	1) F
2) Sally
3) Korean

7. HSTRLEN key field : value의 길이 조회.

명령>	hgetall user-1
결과>	0) email -> charlie@redisgate.com
1) language -> English
2) gender -> M
명령>	hstrlen user-1 email
결과>	21
명령>	hstrlen user-1 gender
결과>	1

8. HINCRBY key field increment(정수.음수ok) : 정수만큼 증감

HINCRBYFLOAT key field float(실수.음수 ok) : 실수만큼 증

해당 field가 없으면 increment값을 set한다.

명령>	hincrby user-1 visits 1
결과>	1
명령>	hincrby user-1 visits 5
결과>	6
명령>	hincrby user-1 visits -10
결과>	-4

9. HEXISTS key field  : field 있는지 조회.

있으면 1 반환.

없으면 0 반환.

명령>	hexists user-1 email
결과>	1
명령>	hexists user-1 xxx
결과>	0

10. HSETNX key field value : field가 기존에 없으면 저장.

기존에 같은 field가 있으면 저장하지 않음.

명령>	hsetnx user-1 email help@redisgate.com
결과>	0
명령>	hsetnx user-1 email2 help@redisgate.com
결과>	1

11. HSCAN key cursor : field, value를 일정 단위만큼 조회.

명령>	hmset myhash f1 v1 f2 v2 f3 v3 c4 v4 c5 v5 c6 v6
결과>	OK
명령>	hscan myhash 0
결과>	next cursor -> 0
0) f1 -> v1
1) f2 -> v2
2) f3 -> v3
3) c4 -> v4
4) c5 -> v5
5) c6 -> v6

 

count, pattern옵션 사용 가능

명령>	hscan myzip 0 count 5
결과>	next cursor -> 0
0) f1 -> v1
1) f2 -> v2
2) f3 -> v3
3) c4 -> v4
4) c5 -> v5
5) c6 -> v6
명령>	hscan myset 0 match c*
결과>	next cursor -> 0
0) c4 -> v4
1) c5 -> v5
2) c6 -> v6

HSCAN key cursor [MATCH pattern] [COUNT count]


12. HRANDFIELD key : 랜덤 field 조회.

명령>	hmset myhash f1 v1 f2 v2 f3 v3 f4 v4 f5 v5 f6 v6
결과>	OK
명령>	hrandfield myhash
결과>	f3

 

count옵션 사용가는.

+count는 필드를 중복하지 않고 조회한다.

  필드수 보다 더 큰 count를 지정했을 경우 필드수 만큼 조회.


-count는 필드를 중복해서 조회한다.  

필드수 보다 더 큰 count를 지정했을 경우 count수 만큼 조회.


withvalues 옵션은 count를 사용했을 경우만 사용할 수 있다.

명령>	hrandfield myhash 3
결과>	1) "f6"
2) "f5"
3) "f3"
명령>	hrandfield myhash -3
결과>	1) "f2"
2) "f4"
3) "f4"

HRANDFIELD key [count [WITHVALUES]]

 

출처 : http://redisgate.kr/redis/command/hashes.php

'Redis' 카테고리의 다른 글

Redis - sentinel  (1) 2024.06.18
Redis - Sorted Sets  (0) 2024.06.16
Redis - Sets  (0) 2024.06.16
Redis - Lists 데이터 타입, 명령어  (3) 2024.06.16
Redis - String 데이터 타입, 명령어  (1) 2024.06.16