我想在Django中使用缓存,而我对如何进行缓存一无所知。我有一些特定的模型中的数据,这些数据需要大量写入。记录将连续添加到模型中。每个用户在模型中都有一些特定数据,类似于订单表。
由于我的模型是写密集型的,所以我不确定Django中的缓存框架将如何有效。我尝试了Django视图特定的缓存,然后尝试开发一个视图,该视图首先将从缓存中获取数据。然后,我将进行另一个调用,该调用将引入缓存完成后添加到模型中的数据。我要做的是将更新的数据添加到原始缓存数据中,然后再次存储。

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

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

我会很高兴您的帮助

最佳答案

您询问“缓存”是一个非常广泛的话题,答案始终是观点,风格和特定应用程序要求的结合。这里有几点要考虑。


如果数据是按用户分配的,则可以按用户缓存:

from django.core.cache import cachecache.set(request.user.id,"foo")cache.get(request.user.id)
通常的做法是保留一个数据库标志,以告知您自缓存以来用户的数据是否发生了更改。因此,在从缓存中获取数据之前,请仅从数据库中检查该标志。如果该标志表明什么都没有更改,请从缓存中获取数据。如果确实发生了更改,请从数据库中拉出,替换缓存,然后再次设置标志。
标志检查应该快速而简单:一张表,由user.id索引,并有一个布尔标志字段。这会将大量索引行压缩到单个数据库页中,并允许快速读取单个字段行。但是,您仍然可以获得永久更新的主存储,从而可以防止使用未更新的缓存数据。您可以在中间件中检查此标志。
您可以通过多种方式来运行到期时间:用户注销时清除缓存,运行清除项目的cron脚本或让缓存后端使项目过期。如果在使用缓存之前使用标志检查,那么将项目保留在缓存中(空间除外)没有问题,缓存后端可以解决该问题。如果使用django简单文件缓存(简单,简单且零配置),则必须清除缓存。一个简单的cron脚本即可。

10-07 19:33
查看更多