Django - 查询集缓存请求独立?
Django - queryset caching request-independent?
我需要缓存一个中型查询集(大约 500 行)。我查看了一些解决方案,django-cache-machine 是最有前途的。
由于查询集几乎是静态的(它是一个 table 城市,已经预先填充并且只有我更新,而且几乎从不更新),我只需要在每个时间段提供相同的查询集请求过滤。
在我的搜索中,有一个细节我真的不清楚:缓存是否是一种单例对象,可用于每个请求?我的意思是,如果两个不同的用户访问同一页面,并且为第一个用户评估查询集,第二个用户是否获得缓存的查询集?
我想不通,你到底遇到了什么问题。您所说的是缓存的经典用例。 Memcache 和 Redis 是两个最受欢迎的选项。您只需要编写一些方法或函数,首先尝试从缓存中加载结果,如果不存在,则查询数据库。例如:-
from django.core.cache import cache
def cache_user(userid):
key = "user_{0}".format(userid)
value = cache.get(key)
if value is None:
# fetch value from db
cache.set(value)
return value
虽然为了简单起见,我将其写为函数,但理想情况下,这应该是相关模型的管理器方法。
我需要缓存一个中型查询集(大约 500 行)。我查看了一些解决方案,django-cache-machine 是最有前途的。
由于查询集几乎是静态的(它是一个 table 城市,已经预先填充并且只有我更新,而且几乎从不更新),我只需要在每个时间段提供相同的查询集请求过滤。
在我的搜索中,有一个细节我真的不清楚:缓存是否是一种单例对象,可用于每个请求?我的意思是,如果两个不同的用户访问同一页面,并且为第一个用户评估查询集,第二个用户是否获得缓存的查询集?
我想不通,你到底遇到了什么问题。您所说的是缓存的经典用例。 Memcache 和 Redis 是两个最受欢迎的选项。您只需要编写一些方法或函数,首先尝试从缓存中加载结果,如果不存在,则查询数据库。例如:-
from django.core.cache import cache
def cache_user(userid):
key = "user_{0}".format(userid)
value = cache.get(key)
if value is None:
# fetch value from db
cache.set(value)
return value
虽然为了简单起见,我将其写为函数,但理想情况下,这应该是相关模型的管理器方法。