我正在使用django的本地内存缓存(django.core.cache.backends.locmem.LocMemCache
)并使用tastypie
用于REST API。
我在文件CommentResource
中的api.py
对象中有以下代码:
def get_object_list(self, request):
cached_comments = cache.get('comments')
if cached_comments is not None:
print 'got comments in cache'
return cached_comments
print "didn't get comments in cache"
comments = super(CommentResource, self).get_object_list(request).order_by('-created')
cache.set('comments', comments, 100)
return comments
现在,当我保存新评论时,API也会返回新评论,即使它打印got comments in cache
。如何缓存新评论?
一定有什么不对劲。 tastypie的dehydrate
方法可能成为问题吗?
更新:我评论了dehydrate
方法,但问题仍然存在。所以这可能不是问题。
更新2:即使django的querysets
很懒,this answer也说
查询集是惰性的,这意味着它们直到调用数据库 他们被评估了。他们可以评估的一种方法是 序列化它们,这就是cache.set在幕后所做的事情。
querysets
的懒惰并不能解释这种行为。