Study/django

django-redis로 unlink 실행하는 방법

bluebamus 2023. 3. 21.

1. 패턴과 일치하는 모든 키를 삭제합니다.

from django.core.cache import cache

# Unlink all keys matching the pattern "my_prefix:*"
for key in cache.scan_iter("my_prefix:*"):
    cache.unlink(key)

이 예제에서는 scan_iter()를 사용하여 "my_prefix:*" 패턴과 일치하는 모든 키를 반복하고 각 키에서 unlink()를 호출합니다. 삭제하기 전에 각 키가 존재하는지 확인하는 오버헤드를 피하기 때문에 delete()를 사용하는 것보다 더 효율적입니다.

 

2. 일괄적으로 키를 삭제합니다.

from django.core.cache import cache

# Unlink keys in batches of 1000
keys = []
for key in cache.scan_iter("*", count=1000):
    keys.append(key)
    if len(keys) == 1000:
        cache.unlink(*keys)
        keys = []
if keys:
    cache.unlink(*keys)

이 예에서는 'count' 옵션이 1000으로 설정된 'scan_iter()'를 사용하여 키를 배치로 검색합니다. 각 키를 keys라는 목록에 추가하고 keys의 길이가 1000에 도달하면 전체 목록에서 unlink()를 호출합니다. 이것은 각 키에서 개별적으로 unlink()를 호출하는 것보다 더 효율적입니다.

 

3. 만료된 키 삭제:

from django.core.cache import cache
from datetime import datetime, timedelta

# Unlink all keys that have expired
now = datetime.now()
for key in cache.scan_iter("*"):
    ttl = cache.ttl(key)
    if ttl is not None and timedelta(seconds=ttl) < (now - datetime.fromtimestamp(0)):
        cache.unlink(key)

이 예제에서는 scan_iter()를 사용하여 모든 키를 반복하고 ttl()을 사용하여 각 키의 TTL(time-to-live)을 확인합니다. TTL이 현재 시간보다 작으면 키가 만료되었다고 가정하고 이에 대해 unlink()를 호출합니다. 만료된 각 키를 삭제하기 전에 존재하는지 확인하는 오버헤드를 피하기 때문에 delete()를 사용하는 것보다 더 효율적입니다.

댓글