UNLINK

Redis 開発者教育
Redis Developer Course
Redis 定期点検/技術支援
Redis Technical Support
Redis エンタープライズサーバ
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)로 삭제한다.

  1. unlinkCommand() <db.c>: 명령 시작
  2. delGenericCommand(async) <db.c>: 통합 삭제 명령, async로 삭제 요청
  3. dbAsyncDelete() <lazyfree.c>: Async로 삭제 처리
    1. dictUnlink() <dict.c>: 키 삭제, 키는 바로(sync)로 삭제한다.
    2. lazyfreeGetFreeEffort() <lazyfree.c>: 멤버수를 리턴한다. String은 항상 1을 리턴하다.
    3. 멤버수가 64개 이하일 경우에는 DEL과 같이 바로(sync) 삭제한다. 왜냐하면 맴버수가 적을 경우에는 별도 쓰레드로 처리하는 것이 시간이 더 오래걸리기 때문이다.
    4. bioCreateBackgroundJob(BIO_LAZY_FREE) <lazyfree.c>: 멤버수가 64개를 초과하면 별도 쓰레드로 백그라운드로 값을 삭제(메모리 해제)한다.

Subquery(서브쿼리) 기능

Key(키) 부분에 서브쿼리를 사용해서 키를 삭제할 수 있습니다.
서브쿼리로 사용할 수 있는 명령은 GET, MGET, LPOP, RPOP, LRANGE, SMEMBERS, SUNION, SINTER, SDIFF, ZRANGE, ZREVRANGE, HGET, HMGET, HKEYS, HVALS, HGETALL, KEYS 입니다.

Example

명령>set mykey myvalue
결과>OK
명령>set key mykey
결과>OK
명령>unlink (get key)
결과>1

  • 여러 개 키(multi key)를 삭제할 수 있습니다.
  • Example

    명령>lpush mylist mykey1 mykey2 mykey3
    결과>3
    명령>unlink (lrange mylist 0 -1)
    결과>3

  • keys 명령을 사용할 수 있습니다.
  • Example

    명령>unlink (keys user*)
    결과>10
    명령>unlink (keys * string)
    결과>20

  • 여러 개 서브쿼리를 사용할 수 있습니다.
  • Example

    명령>unlink (lrange mylist 0 -1)   (sunion myset1 myset2)   mykey10
    결과>10
    서브쿼리 기능은 Enterprise 서버에서 사용 가능합니다.

    명령문

    UNLINK key [key ...] | (subquery)

    • 이 명령은 version 4.0.0 부터 사용할 수 있다.
    • 논리적 처리 소요시간은 O(1)이다. 하지만 별도 쓰레드에서 값을 삭제(메모리 해제)하는데 소요시간은 O(N)이다. 여기서 N은 멤버수이다.
    관련 명령 DEL
    Clients for Java Jedis, Lettuce, Redisson
    Clients for C Hiredis

    << EXISTS UNLINK KEYS >>

    조회수 :

    Email 返事がかかってなれば、メールでお知らせします。