2

我正在使用 django 作为框架来为带有博客的站点构建内容管理系统。

每篇博文都会有一个路由,其中​​包含博文的唯一标识符。这些博客文章可以安排并有一个到期日期。这意味着路线必须是动态的。

整个站点都需要缓存,我们已经将 redis 设置为后端缓存。我们目前针对静态路由缓存渲染页面,但需要找到一种针对动态路由缓存页面的方法(并在博客文章过期时使它们失效。)

我可以使用 cron 作业,但这不合适,因为... a) 新博客帖子很少发布,而且不定期发布 b) 用户可以将帖子安排到一分钟。这意味着 cron 作业必须每分钟运行一次,这似乎有点过分了!

我刚刚找到了django-cacheops库,它似乎完全符合我的需要(安排缓存失效并通过信号使它们失效)。这与我们现有的设置兼容吗?设置有多容易?

我认为这是一个非常普遍的问题 - 有没有人有比上述更好的想法?

4

2 回答 2

1

我无法对 django-cacheops 发表评论,因为我从未使用过它,但 Redis 使用EXPIRE命令提供了一种非常简单的方法:

设置密钥超时。超时后,密钥将被自动删除。

用法:

SET some_key "some_value"
EXPIRE some_key 10

现在 Redis 将在 10 秒内自动清理/删除 key some_key。如果您需要从一开始就知道何时应该删除博客文章的缓存,这应该可以完美地满足您的需求。

于 2014-07-13T20:16:27.207 回答
0

当帖子更改时,Cacheops 会使缓存失效,这是它的主要用途。但是您也可以通过超时过期:

from cacheops import cached_as, cached_view_as

# A queryset
post = Post.objects.cache(timeout=your_timeout).get(pk=post_pk)

# A function
@cached_as(Post.objects.filter(pk=post_pk), timeout=your_timeout)
def get_post_data(...):
    ...

# A view
@cached_view_as(Post, timeout=your_timeout)
def post(request, ...):
    ...

但是,目前无法根据缓存对象指定超时。

于 2014-07-16T09:54:14.640 回答