查找何时设置了django缓存

时间:2015-12-23 04:03:30

标签: django caching

我正在尝试使用以下算法在我的应用程序中为Django实现智能缓存失效:

page = get_cache_for_item(item_pk + some_key)
cache_set_at = page.SOMETHING_HERE
modified = models.Object.filter(pk=item_pk,modified__gt=cache_set_at).exists() #Cheap call
if modified:
    page = get_from_database_and_build_slowly(item_pk)
    set_cache_for_item(item_pk + some_key)
return page

意图是,我想快速调用数据库来获取修改时间,当且仅当页面被设置为自设置缓存以来,使用资源和数据库密集页面构建页面。 / p>

不幸的是,我无法弄清楚如何在步骤SOMETHING_HERE设置缓存的时间。

这可能吗?

1 个答案:

答案 0 :(得分:1)

Django似乎没有存储这些信息。信息(如果存储)在您选择的缓存实现中。

这就是Django在memcached中存储密钥的方式。

 def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
        key = self.make_key(key, version=version)
        if not self._cache.set(key, value, self.get_backend_timeout(timeout)):
            # make sure the key doesn't keep its old value in case of failure to set (memcached's 1MB limit)
            self._cache.delete(key)

Django不存储创建时间并让缓存处理超时。所以,如果有的话,你应该查看你选择的缓存。我知道Redis例如也没有存储该值,所以即使你绕过Django的缓存并查看Redis,你也无法使用redis工作。

我认为你最好的选择是以某种方式存储密钥。您可以覆盖@cache_page或只创建一个改进的@smart_cache_page并在那里存储创建的时间戳。

修改

可能还有其他更简单的方法可以实现这一目标。你可以使用post_save信号。这样的事情:Expire a view-cache in Django?

仔细阅读,因为实现取决于您的Django版本。