unlink
UNLINK
레디스 개발자 교육 신청 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
Key 삭제
이 명령은 Redis 4.0에서 추가된 것으로 DEL과 다른 점은 비동기(async)로 별도 쓰레드에서 백그라운드로 실행된다는 점이다. 따라서 collection 데이터타입에 멤버수가 많은 경우 DEL 보다 훨씬 빠르게 처리된다.
성능 테스트
Set 데이터 타입 키 하나에 10만개의 멤버를 넣고 DEL과 UNLINK로 각각 삭제하고 SLOWLOG로 처리 시간을 측정했다. 값이 차지하는 메모리는 약 12MB였다.
- DEL 명령으로 삭제 시간: 44,217 microsecond
- UNLINK 명령으로 삭제 시간: 25 microsecond
- 처리 시간 비교: UNLINK가 약 1700배 빠르다. 멤버수가 많아 키 삭제 시간이 많이 걸려서 성능에 문제가 될 경우 이 명령을 사용하시기 바랍니다.
내부 구조
키 삭제는 동기(sync)로 하고 값 삭제를 별도의 쓰레드에서 비동기(async)로 처리한다. 하지만 멤버수가 64개 이하일 경우에는 DEL과 같이 동기(sync)로 삭제한다.
- unlinkCommand() <db.c>: 명령 시작
- delGenericCommand(async) <db.c>: 통합 삭제 명령, async로 삭제 요청
- dbAsyncDelete() <lazyfree.c>: Async로 삭제 처리
- dictUnlink() <dict.c>: 키 삭제, 키는 바로(sync)로 삭제한다.
- lazyfreeGetFreeEffort() <lazyfree.c>: 멤버수를 리턴한다. String은 항상 1을 리턴하다.
- 멤버수가 64개 이하일 경우에는 DEL과 같이 바로(sync) 삭제한다. 왜냐하면 맴버수가 적을 경우에는 별도 쓰레드로 처리하는 것이 시간이 더 오래걸리기 때문이다.
- bioCreateBackgroundJob(BIO_LAZY_FREE) <lazyfree.c>: 멤버수가 64개를 초과하면 별도 쓰레드로 백그라운드로 값을 삭제(메모리 해제)한다.
명령문
UNLINK key [key ...]
- 이 명령은 version 4.0.0 부터 사용할 수 있다.
- 논리적 처리 소요시간은 O(1)이다. 하지만 별도 쓰레드에서 값을 삭제(메모리 해제)하는데 소요시간은 O(N)이다. 여기서 N은 멤버수이다.
관련 명령 | DEL |
Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
<< EXISTS | UNLINK | RM >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.