Study/django
django-redis로 unlink 실행하는 방법
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()를 사용하는 것보다 더 효율적입니다.
'Study > django' 카테고리의 다른 글
백엔드를 위한 django rest framework with 파이썬 (0) | 2023.08.22 |
---|---|
django-redis에서 scan_iter를 count 옵션과 함께 사용하는 방법 (1) | 2023.03.21 |
django-redis의 hset 사용법에 대해 chatGPT에 물어봤을때 (0) | 2023.03.20 |
django-redis의 cache 방법을 이해하자! (0) | 2023.03.18 |
django MQ 시리즈 3편 - task queue (3) : Custom Study Project (1) | 2023.03.14 |
댓글