使用django中的较新项更新现有缓存数据

时间:2016-02-17 03:01:20

标签: python django caching django-models django-views

我想在Django中使用缓存,我很想知道如何去做。我在一些特定模型中有数据是写密集型的。记录将不断添加到模型中。每个用户在模型中都有一些类似于订单表的特定数据。 由于我的模型是写密集型的,我不确定Django中的缓存框架是多么有效。我尝试了Django视图特定的缓存,我尝试开发一个视图,首先它将从缓存中获取数据。然后我会有另一个调用,它会带来在缓存完成后添加到模型中的数据。我想要做的是将更新的数据添加到原始缓存数据并再次存储。

就像我不想让缓存过期一样,我只想继续添加到我现有的缓存数据中。可能是3小时一次,我可以清除它。

我做得对吗?有没有比这更好的方法。我真的可以添加到现有缓存中的项目。

我很乐意为你提供帮助

1 个答案:

答案 0 :(得分:1)

你问及"缓存"这是一个非常广泛的主题,答案总是混合了意见,风格和特定的应用程序要求。这里有几点需要考虑。

  1. 如果数据是每个用户,则可以按用户缓存:

    from django.core.cache import cache cache.set(request.user.id,"foo") cache.get(request.user.id)

  2. 通常的做法是保留一个数据库标志,告诉您用户的数据自缓存以来是否发生了变化。因此,在从缓存中获取数据之前,请仅检查数据库中的此标志。如果标志没有改变,请从缓存中获取数据。如果确实发生了变化,请从DB中取出,替换缓存,然后再次设置标志。

  3. 标志检查应该快速而简单:一个表,由user.id索引,以及一个布尔标志字段。这会将大量索引行压缩到单个数据库页面中,并且可以快速获取单个字段行。然而,您仍然可以获得持久更新的主存储,从而防止使用未更新的缓存数据。您可以在中间件中检查此标志。

  4. 您可以通过多种方式运行到期:用户注销时清除缓存,运行清除项目的cron脚本,或让缓存后端使项目过期。如果在使用缓存之前使用标记检查,则除了空格之外,将缓存中的项目保留在缓存中是没有问题的,缓存后端处理它。如果您使用django简单文件缓存(这是简单,简单和零配置),您将必须清除缓存。一个简单的cron脚本就可以了。