>  기사  >  데이터 베이스  >  일괄 삭제를 위한 redis 명령 소개

일괄 삭제를 위한 redis 명령 소개

尚
앞으로
2020-05-06 09:12:444350검색

일괄 삭제를 위한 redis 명령 소개

Redis는 일괄 삭제를 구현합니다.

1 redis 루트 디렉터리에 액세스합니다. cd /usr/local/redis-2.8.19

2 redis-cli -h 127.0.0.1 -p 6379( 127.0 .0.1을 포함하여 서버의 IP 주소로 쓸 수 있으며, 6379는 포트 번호입니다)

3. 모든 키 값 보기: 키 *

4. 지정된 인덱스 값 삭제: del key

5. 전체 Redis 서버의 데이터를 삭제합니다: flashall

6. 현재 라이브러리의 모든 키를 삭제합니다: flashdb

[첫 번째 방법]:

다음은 "key_"로 시작하는 모든 Redis 데이터를 일괄 삭제하는 것입니다. is 100

redis-cli -h (IP地址) -p 6379 (端口号:6379) KEYS key_* | xargs redis-cli (-h (IP地址) -p 6379 (端口号:6379)) del 
 
=>[执行后返回的结果影响数量]:(integer) 100[数量100个]

[위 명령의 DEL 함수 구체적인 사용법]:

DEL 키 [키...]

하나 이상의 지정된 키를 삭제합니다.

존재하지 않는 키는 무시됩니다.

시간 복잡도:

O(N), N은 삭제된 키의 수입니다.

단일 문자열 유형 키를 삭제하면 시간 복잡도는 O(1)입니다.

단일 목록, 집합, 순서 집합 또는 해시 테이블 유형의 키를 삭제합니다. 시간 복잡도는 O(M)이고, M은 위 데이터 구조의 요소 수입니다.

반환 값:

삭제된 키 수.

[예]:

#  删除单个 key
redis> SET name huangz
OK
 
redis> DEL name
(integer) 1
 
# 删除一个不存在的 key
redis> EXISTS phone
(integer) 0
 
redis> DEL phone # 失败,没有 key 被删除
(integer) 0
 
# 同时删除多个 key
redis> SET name "redis"
OK
 
redis> SET type "key-value store"
OK
 
redis> SET website "redis.com"
OK
 
redis> DEL name type website
(integer) 3

[두 번째 방법]:

첫 번째 방법의 단점: 매번 연결을 설정해야 한다는 단점이 있으며, 금액이 크면 허용됩니다. , 효율성이 좋지 않습니다.

내장된 Lua 인터프리터를 통해 EVAL 명령을 사용하여 Lua 스크립트를 처리할 수 있습니다:

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'

[참고]: 그러나 이 처리 방법을 사용하면 볼륨이 클 경우 lua 함수 압축 해제 및 오류가 보고됩니다

'''
(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack
'''

[ 두 번째 방법의 최적화 후]:

[참고]: 먼저 패턴 일치에서 'Volume:'으로 모든 키를 저장하는 배열 키를 정의한 다음 for 루프 프로세스를 수행합니다. 매번 5000개의 키, 즉 매번 5000개의 키를 삭제합니다

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "local keys = redis.call('keys', ARGV[1]) 
	for i=1,#keys,5000 
		do 
			redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) 
		end 
		return #keys" 0 'Volume:*'

[두 번째 방법의 단점]:

KEYS 작업은 온라인에서 금지됩니다!

Redis는 단일 스레드입니다. 볼륨이 크면 키가 통과되어 차단이 발생하고 다른 클라이언트가 연결할 수 없게 됩니다!

[세 번째 방법]:

scan 명령은 redis2.8부터 지원되었습니다. 패턴 일치는 다음 형식을 사용하여 많은 수의 키를 일괄 삭제할 수 있습니다.

redis-cli -a youpassowrd -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 redis-cli -a youpassword -n 0 -p 6379 DEL

[결과]:

'''
 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 207
'''

더 많은 Redis 지식 ,

redis 소개 튜토리얼 칼럼을 팔로우하세요.

위 내용은 일괄 삭제를 위한 redis 명령 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제