【发布时间】:2018-01-02 11:50:54
【问题描述】:
TLDR
有没有办法标记缓存的值,所以我可以这样做:
cache.filter('some_tag').clear()
详情
在我的项目中,我有以下模型:
class Item(models.Model):
month = models.DateField('month', null=False, blank=False, db_index=True)
kg = models.BigIntegerField('kg')
tags = models.ManyToManyField('Tag', related_name='items')
// bunch of other fields used to filter data
我有一个report_view,它根据URL 查询中提供的filters 返回kg 按月 和按标签 的总和.
类似这样的:
--------------------------------
|Tag |jan |fev |mar |
--------------------------------
|Tag 1 |1000 |1500 |2000 |
--------------------------------
|Tag 2 |1235 |4652 |0 |
--------------------------------
由于我的 Item 表已经有超过 400 万条记录并且一直在增长,所以我的 report_view 被缓存了。
到目前为止,我已经涵盖了所有这些内容。
问题是:站点用户可以将 tags 从 Items 更改为每次发生这种情况时我都必须使缓存无效,但我想在更多粒状方式。
例如,如果用户将 Item 中的 tag 从 january 更改为无效,则该月的所有总数应该无效(我更喜欢按月缓存,因为有时更改一个 tag 会对其他)。但是我不知道所有被缓存的视图,因为有成千上万种不同的过滤器会改变URL。
到目前为止我做了什么:
- 当
tag更改时,设置一个信号使我的所有缓存失效
但这会清除所有在我的情况下不是最佳的东西。有没有办法用 Django 缓存框架做类似cache.filter('some_tag').clear() 的事情?
【问题讨论】:
标签: django django-cache