2017-10-12 2 views
1

redis 캐시 또는 다른 캐시에 키가 있고 해당 키에 대해 많은 GET 쿼리가있는 경우를 가정 해보십시오. 키 값은 모델 (테이블)의 데이터에 따라 다릅니다. 이제 어떤 프로세스를 통해 그 키와 관련된 값이 데이터베이스에서 업데이트되면 캐시를 무효화 할 수있는 방법이 무엇입니까?테이블의 업데이트시 캐시 무효화

답변

3

Django signals을 사용하여 post_save 신호를 수신하고 연결된 캐시를 제거하는 수신 기능을 작성할 수 있습니다. 예를 들어 :

from django.db.models.signals import post_save 

@receiver(post_save, sender=Item) 
def my_handler(sender, instance, created, **kwargs): 
    r.delete('item/%d' % instance.pk) 

보다 강력한 솔루션은 django-cacheops 같은 패키지를 사용하는 것입니다.

+0

안녕하세요 @jacob 신호가 GET 요청이 호출 될 때 거의 동시에 생성되면 어떤 생각이 들었습니다. 그러면 어떤 신호가 우선 순위를 얻게 될까요? –

+0

@UtkarshSrivastav Django 웹 애플리케이션 작업자는 서로 다른 프로세스에서 작동하므로 서로 경쟁하지 않아야합니다. Redis'delete '작업은 효과적으로 즉각적으로 이루어져야합니다. 매우 특이한 사용 사례를 다루지 않는 한 문제가 될 수 없습니다. –