DB

Redis 란?_ Automatic creation and removal of keys

Raconer 2023. 4. 16. 23:39
728x90

개요

지금까지 예제에서 요소를 푸시하기 전에 빈 목록을 만들거나 내부에 더 이상 요소가 없을 때 빈 목록을 제거할 필요가 없었습니다.
목록이 비어 있을 때 키를 삭제하거나 키가 존재하지 않고 예를 들어 LPUSH를 사용하여 요소를 추가하려는 경우 빈 목록을 만드는 것은 Redis의 책임입니다.
이는 목록에만 국한되지 않고 여러 요소(스트림, 세트, 정렬된 세트 및 해시)로 구성된 모든 Redis 데이터 유형에 적용됩니다.
기본적으로 세 가지 규칙으로 동작을 요약할 수 있습니다.

  1. 집계 데이터 유형에 요소를 추가할 때 대상 키가 없으면 요소를 추가하기 전에 빈 집계 데이터 유형이 생성됩니다.
  2. 집계 데이터 유형에서 요소를 제거할 때 값이 비어 있으면 키가 자동으로 폐기됩니다. 스트림 데이터 유형은 이 규칙의 유일한 예외입니다.
  3. 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