[list] Redis 목록의 모든 항목 삭제

Redis에 LIST 데이터 유형이 있다고 가정합니다. 모든 항목을 어떻게 삭제합니까? 나는 이것을 이미 시도했다 :

LTRIM key 0 0
LTRIM key -1 0

둘 다 첫 번째 요소를 남깁니다. 그러면 모든 요소가 남습니다.

LTRIM key 0 -1

목록을 완전히 비우는 별도의 명령이 표시되지 않습니다.



답변

키를 삭제하면 모든 항목이 지워집니다. 목록이 전혀없는 것은 항목이없는 것과 유사합니다. Redis는 존재하지 않는 키에 액세스하려고 할 때 예외를 발생시키지 않습니다.

DEL key

다음은 몇 가지 콘솔 로그입니다.

redis> 키 *
(빈 목록 또는 세트)
redis> LPUSH 이름 John
(정수) 1
redis> LPUSH 이름 Mary
(정수) 2
redis> LPUSH 이름 Alice
(정수) 3
redis> LLEN 이름
(정수) 3
redis> LRANGE 이름 0 2
1) "앨리스"
2) "메리"
3) "존"
redis> DEL 이름
(정수) 1
redis> LLEN 이름
(정수) 0
redis> LRANGE 이름 0 2
(빈 목록 또는 세트)


답변

당신은 모든 값을 제거 할 수 있습니다 목록 경우에만 목록이 하나 개 이상의 값을 가지고

LTRIM key -1 0

예:

redis 127.0.0.1:6379> RPUSH mylist four 1 3 1
(integer) 4
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
6) "mylist"
redis 127.0.0.1:6379> LTRIM mylist -1 0
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
(empty list or set)
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"

그러나 목록에 하나의 값만있는 경우 다음을 사용해야합니다.

DEL key


답변

LTRIM을 사용하십시오 . … Aaaand 마법 여기가 사용하는 것입니다 start 보다 크다 end .

LTRIM key 99 0

그리고 … 붐! 전체 요소 목록이 있습니다. 그냥 * 똥 * 바로 눈앞에 !! 잔여 물이 남아 있지 않으며 질문이 전혀 없습니다.

참고 : 이렇게하면 여기에 설명 된대로 키가 “제거됨”( 삭제됨 과 같이) 됩니다.

… 시작이 목록의 끝보다 크거나 시작> 끝이면 결과는 빈 목록이됩니다 (키가 제거됨).


답변

받아 들여지는 대답이 잘못되었습니다. 내가 가지고 있다고 가정

redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
6) "mylist"

ahmed의 예를 사용하는 것이 실제로 맞습니다. 지금 내가 할 경우 :

DEL 'test4'

나는 다음으로 끝납니다.

1) "newKey"
2) "firstHash"
3) "secondList"
4) "firstList"
5) "mylist"`

그래서 나는 ‘test4’목록에서 모든 항목을 제거하지 않았고 test4 자체를 제거 했습니다 . 같은 것이 아닙니다. 전혀. 목록 키가 여러 데이터에서 계산 된 해시 인 작은 앱이 있습니다 (모두 그렇지 않습니까?). 그 목록은 때때로 지워지지 만 빈 목록과 존재하지 않는 목록의 의미는 매우 다릅니다. 그래서, 아니요, ‘myhashes’를 삭제하고 싶지 않습니다. 모든 항목을 제거하고 싶습니다.

오, 여기서 방황하는 너희는 조심하라.


답변

나는 이것을 시도했고 그것은 나를 위해 작동합니다. 목록 이름으로 myList 를 변경 하고 실행하십시오.

redis-cli KEYS "myList:*" | xargs redis-cli DEL


답변

이것은 늦은 응답 일 수 있지만 누군가가 여전히 해당 기능이 필요한 경우를 대비하여 여기에 고정하고 있습니다.

짧은 대답

ltrim mylist 0-(n + 1) 여기서 mylist는 key이고 n은 mylist의 길이입니다.

긴 대답

ltrim이 작동하는 방식은 두 개의 인덱스를 취하고 인덱스를 포함하여 그 사이에있는 요소를 반환한다는 것입니다.

Ltrim 목록 startIndex endIndex

10 개의 항목이 포함 된 mylist 키가있는 redis 목록이 있다고 가정하는 예 :

ltrim mylist 0 5는 인덱스 0부터 인덱스 5까지의 요소로 목록을 트리밍하고 해당 범위를 벗어나는 요소는 버립니다.

다행히 redis 목록 작업은 일부 상황에서 매우 유용한 것으로 입증 된 네거티브 인덱싱을 지원합니다. 일반적으로 목록의 길이를 모를 때.

-1은 마지막 요소, -2는 두 번째 요소 등을 나타냅니다. 그리고 (-n)은 첫 번째 요소입니다.

범위를 벗어난 인덱스는 유해하지 않습니다. 끝 인덱스가 목록의 길이보다 크면 redis는이를 마지막 인덱스와 동일하게 처리합니다.

이것이 ltrim mylist 0,-(n +1) 목록을 지우는 이유입니다. (-n)은 인덱스 0과 동일하기 때문입니다. 여기에 1을 더하면 첫 번째 요소 앞에 있기 때문에 해당 범위 내에 요소가 남지 ​​않습니다.


답변