2013년 2월 12일 화요일

Redis hash command

*  HDEL key field [ field ... ]
 Time complexity: O(N) - N은 지우려는 field의 수

1. key를 찾는다.
2. key의 value인 hash object에서 field를 지운다.
3. hash object에서 모든 element를 지웠다면 key도 지운다.

- 리턴
1.  key가 없으면 ":0\r\n"을 리턴
2.  실제로 지운 field의 개수를 리턴

* HEXISTS key field
Time complexity: O(1)

1. key를 찾는다.
2. field가 있는지 없는지 확인한다.

- 리턴
1. key가 없으면 ":0\r\n"을 리턴
2. field가 있으면 ":1\r\n"을, 없으면 ":0\r\n"을 리턴

* HGET key field
Time complexity: O(1)

1. key로부터 field를 찾는다.
2. field로부터 value를 찾는다.

- 리턴
1. key가 없거나 field가 없으면 "$-1\r\n"을 리턴
2. field에 해당하는 value를 리턴

* HGETALL key
Time complexity: O(N) - N은 hash의 size

1. key를 찾는다.
2. key의 value인 hash object에 있는 element의 수를 계산한다.
3. hash object를 처음부터 끝까지 순회하며 file와 value를 리턴할 버퍼에 넣는다.

- 리턴
1. key가 없으면 "*0\r\n"을 리턴
2. key에 속한 모든 field의 value를 리턴: 앞에는 element의 개수*2를 주고, 이후에 field, value의 순서로 표시한다.

* HINCRBY key field increment
Time complexity: O(1)

1. field의 값이 integer이면 increment만큼 증가시킨다.
2. increment는 양수/음수가 가능하다.

- 리턴
1. field로 저장된 값이 integer가 아니면 아무것도 리턴하지 않는다.
2. integer이면 변경된 값을 리턴

* HINCRBYFLOAT key field increment
 Time complexity: O(1)

1. HINCRBY와 같으나 field의 value가 float라는 것만 다르다.

* HKEYS key
Time complexity: O(N) - N은 hash의 size

1. key를 찾는다.
2. key의 value인 hash object에 있는 element의 수를 계산한다.
3. hash object를 처음부터 끝까지 순회하며 field를 리턴할 버퍼에 넣는다.

- 리턴
1. key가 없으면 "*0\r\n"을 리턴
2. key에 속한 모든 field를 리턴: 앞에는 element의 개수를 주고, 이후에 field를 표시한다.

* HLEN key
Time complexity: O(1)

1. key의 value인 hash object에 있는 element의 수를 계산한다.

- 리턴
1. key가 없으면 ":0\r\n"을 리턴
2. key에 속한 field의 개수를 리턴 -> 예) 5개인 경우 - ":5\r\n"

* HMGET key field [ field ...]
Time complexity: O(N) - N은 가져오려는 field의 수

1. key를 찾는다.
2. key의 value인 hash object에서의 field로부터 value를 찾는다.

- 리턴
1. 앞에 가져온 field의 개수를 표시하고, 이후에 field에 맞는 value를 표시한다.

* HMSET key field value [ field value ...]
Time complexity: O(N) - N은 설정하려는 field의 수

1. key를 찾는다.
2. key의 value인 hash object에 field/value를 저장한다.(HSET참조)

- 리턴
1. field/value의 쌍이 맞지 않으면 에러 리턴
2. 정상적으로 설정했을 경우 "+OK\r\n"을 리턴

* HSET key field value
Time complexity: O(1)

1. key가 있는지 확인 후 없으면 새로 만든다. 이때 key에 대한 value는 zip list를 가지는 hash object이다.
2. field나 value의 크기가 zip list에 넣을 수 없을만큼 크면 zip list로 저장하고 있던 것을 hash table로 바꾼다.
3. hash table로 저장되어 있는 경우라면 string이 integer로 변환될 수 있는지 확인하여 가능하다면 변환한다. -> 공간 절약
4. key의 value인 hash object에 field와 value를 저장한다. -> field가 hash object의 key
5. field가 이미 있으면 덮어쓴다.

- 리턴
1. 기존에 저장되어 있는 key의 type이 REDIS_HASH가 아니면 wrong type error 를 리턴한다.
2. field가 새로 저장된 것이면 ":1\r\n"을 리턴
3. field가 이미 있어서 덮어 쓴 것이면 ":0\r\n"을 리턴

* HSETNX key field value
Time complexity: O(1)

1. key를 찾는다.

- 리턴
1. field가 있으면 아무것도 저장하지 않고 ":0\r\n"을 리턴
2. field가 없으면 hash object에 field/value를 저장하고 ":1\r\n"을 리턴

* HVALS key
Time complexity: O(N) - N은 hash의 size

1. key를 찾는다.
2. key의 value인 hash object에 있는 element의 수를 계산한다.
3. hash object를 처음부터 끝까지 순회하며 value를 리턴할 버퍼에 넣는다.

- 리턴
1. key가 없으면 "*0\r\n"을 리턴
2. key에 속한 모든 field의 value를 리턴: 앞에는 element의 개수를 주고, 이후에 value를 표시한다.

------------

1. lookupKey: redisDb로부터 key를 찾는다. 찾으면 value를 리턴하고 못찾으면 NULL을 리턴한다.
2. expireIfNeeded: expire 시간이 지났으면 key를 지운다.
3. propagateExpire: slave와 AOF 파일에도 key를 지운다.
4. lookupKeyWrite/lookupKeyRead: expireIfNeeded를 호출한 후 lookupKey를 호출한다. read의 경우는 통계정보를 저장해준다.
5. hashTypeLookupWriteOrCreate: key를 찾아보고 없으면 새로 만든다. 이미 있는 경우는 key의 type이 REDIS_HASH인지 확인한다.
6. hash object를 처음 만드는 경우 zip list로 만든다. zip list에는 제약(string의 크기, list의 개수 등...)이 있으므로 사용중 zip list로 저장할 수 없는 값이 생기면 hash table로 바꿔준다.

댓글 없음:

댓글 쓰기

Building asynchronous views in SwiftUI 정리

Handling loading states within SwiftUI views self loading views View model 사용하기 Combine을 사용한 AnyPublisher Making SwiftUI views refreshable r...