kni*_*nap 6 django caching path invalidation
我正在从Django缓存中删除单个路径,如下所示:
from models import Graph
from django.http import HttpRequest
from django.utils.cache import get_cache_key
from django.db.models.signals import post_save
from django.core.cache import cache
def expire_page(path):
request = HttpRequest()
request.path = path
key = get_cache_key(request)
if cache.has_key(key):
cache.delete(key)
def invalidate_cache(sender, instance, **kwargs):
expire_page(instance.get_absolute_url())
post_save.connect(invalidate_cache, sender = Graph)
Run Code Online (Sandbox Code Playgroud)
这有效 - 但有没有办法递归删除?我的路径看起来像这样:
Run Code Online (Sandbox Code Playgroud)/graph/123 /graph/123/2009-08-01/2009-10-21
只要保存了ID为"123"的图形,就需要使两个路径的缓存无效.可以这样做吗?
小智 10
您可能想要考虑使用分代缓存策略,它似乎适合您要完成的任务.在您提供的代码中,您将为每个绝对URL存储"代"号.因此,例如,您将初始化"/ graph/123"以生成一代,然后其缓存键将变为类似"/ GENERATION/1/graph/123".如果要使该绝对URL的缓存失效,则增加其生成值(在本例中为2).这样,下次有人去查找"/ graph/123"时,缓存键变为"/ GENERATION/2/graph/123".这也解决了所有子页面到期的问题,因为它们应该引用与"/ graph/123"相同的缓存键.
一开始理解它有点棘手,但它是一个非常优雅的缓存策略,如果正确完成意味着你永远不必从缓存中删除任何东西.有关更多信息,这里是关于代际缓存的演示文稿,它适用于Rails,但概念是相同的,无论语言如何.
| 归档时间: |
|
| 查看次数: |
3164 次 |
| 最近记录: |