728x90
개요
지금까지 예제에서 요소를 푸시하기 전에 빈 목록을 만들거나 내부에 더 이상 요소가 없을 때 빈 목록을 제거할 필요가 없었습니다.
목록이 비어 있을 때 키를 삭제하거나 키가 존재하지 않고 예를 들어 LPUSH를 사용하여 요소를 추가하려는 경우 빈 목록을 만드는 것은 Redis의 책임입니다.
이는 목록에만 국한되지 않고 여러 요소(스트림, 세트, 정렬된 세트 및 해시)로 구성된 모든 Redis 데이터 유형에 적용됩니다.
기본적으로 세 가지 규칙으로 동작을 요약할 수 있습니다.
- 집계 데이터 유형에 요소를 추가할 때 대상 키가 없으면 요소를 추가하기 전에 빈 집계 데이터 유형이 생성됩니다.
- 집계 데이터 유형에서 요소를 제거할 때 값이 비어 있으면 키가 자동으로 폐기됩니다. 스트림 데이터 유형은 이 규칙의 유일한 예외입니다.
- LLEN(목록의 길이를 반환)과 같은 읽기 전용 명령이나 빈 키를 사용하여 요소를 제거하는 쓰기 명령을 호출하면 키가 다음 유형의 빈 집계 유형을 보유하고 있는 것과 항상 동일한 결과가 생성됩니다. 명령은 찾을 것으로 예상합니다.
Examples of rule 1: list를 추가 할때 선언한 key가 없어도 자동 생성된다.
> del mylist
(integer) 1
> lpush mylist 1 2 3
(integer) 3
// 그러나 키가 존재하는 경우 잘못된 유형에 대해 작업을 수행할 수 없습니다.
> set foo bar
OK
> lpush foo 1 2 3
(error) WRONGTYPE Operation against a key holding the wrong kind of value
> type foo
string
Example of rule 2: key는 있지만 value를 전부 삭제 할 경우 키가 더 이상 존재하지 않습니다.
> lpush mylist 1 2 3
(integer) 3
> exists mylist
(integer) 1
> lpop mylist
"3"
> lpop mylist
"2"
> lpop mylist
"1"
> exists mylist
(integer) 0
// 모든 요소가 팝된 후에는 키가 더 이상 존재하지 않습니다.
Example of rule 3: llen을 사용하여 없는 list를 검색 하여도 빈 list로 인지 하여 출력됩니다.
> del mylist
(integer) 0
> llen mylist
(integer) 0
> lpop mylist
(nil)
728x90
'DB' 카테고리의 다른 글
Redis란?_Sets (0) | 2023.04.16 |
---|---|
Redis 란?_Hash (0) | 2023.04.16 |
Redis 란?_명령어_brpop (0) | 2023.04.16 |
Redis 란?_명령어_기초 (0) | 2023.04.16 |
Redis 란?_Key/value 규칙 (0) | 2023.04.16 |