我使用django作为框架,为拥有博客的网站构建内容管理系统。
每篇博文都有一条路线,其中包含博客文章的唯一标识符。这些博客文章可以安排并有一个到期日。这意味着路线必须是动态的。
整个站点需要缓存,我们将redis设置为后端缓存。我们目前正在针对静态路由缓存呈现的页面,但需要找到一种针对动态路由缓存页面的方法(并在博客文章过期时使它们失效。)
我可以使用cron工作,但它不合适因为...... a)新的博客帖子很少上线,而不是定期上线 b)用户可以安排帖子到分钟。这意味着一个cron作业必须每分钟运行一次,这似乎有点过头了!
我刚刚找到了django-cacheops库,这似乎正是我所需要的(安排我们的缓存失效并通过信号使它们无效)。这与我们现有的设置是否兼容,设置有多容易?
我认为这是一个非常常见的问题 - 有没有人比上面有更好的想法?
答案 0 :(得分:1)
我无法对django-cacheops发表评论,因为我从未使用它,但Redis使用EXPIRE命令提供了一种非常简单的方法:
设置密钥超时。超时过期后,密钥将自动删除。
用法:
SET some_key "some_value"
EXPIRE some_key 10
现在,Redis会在10秒内自动清除/删除密钥some_key。如果您需要删除博客帖子的缓存,知道何时应该从一开始就删除它们,这将完全满足您的需求。
答案 1 :(得分: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, ...):
...
但是,目前无法根据缓存对象指定超时。