2017-09-27 1 views
0

J'utilise per-view cache dans Django et je veux rafraîchir le cache dès qu'il est obsolète. Dans la documentation, je ne vois aucune information sur l'actualisation du cache périmé et après avoir passé plusieurs threads, j'ai décidé d'utiliser des signaux django pour envoyer un signal à une fonction qui supprimera les enregistrements de cache de DB. Donc mon problème est de savoir comment récupérer les clés et les supprimer?Dans Django, comment pouvons-nous obtenir toutes les clés de cache stockées dans la base de données (MySQL)

Je vois que l'implémentation par défaut fournit un moyen de donner un temps d'expiration au cache (comme dans @cache_page (60 * 15)) et il s'actualise chaque fois que nous appelons la vue après l'expiration. en fonction du temps prédéfini?

Répondre

0

J'ai trouvé quelques solutions ici (Expire a view-cache in Django?). Il est surtout lié aux données memcached, mais la mienne est la base des données mises en cache.

je suis venu avec des signaux de Django pour appeler une fonction pour effacer toutes les Le cache étant lié à ma vue Comme la récupération des clés n'est pas une chose simple dans les données mises en cache db, j'ai simplement passé le SQL brut pour supprimer le cache de la vue, voici l'extrait de code ci-dessous:

Note: Comme je n'ai une vue en cache, je supprime tout simplement, mais si vous avez plusieurs caches de vue par la table de cache vous devez être prudent lorsque vous supprimez les données du cache

cache_table est le nom défini à votre table de cache dans settings.py

CACHES = { 
'default': { 
    'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
    'LOCATION': 'cache_table', 
}} 



@receiver(post_save, sender=SampleModel) 
def remove_cache(instance, **kwargs): 
with connection.cursor() as cursor: 
    cursor.execute("DELETE FROM cache_table where cache_key like ('%views.decorators.cache%')") 
    print('Deleted view cache') 
0

Une autre approche est la création de votre propre cache et de créer vos propres clés à l'aide du django low-level cache API. C'est facile et vous donne plus de contrôle sur les données mises en cache.