[英]How to set Django queryset to GKE memcached
不知何故,我认为 pymemcached 应该像 django 缓存一样开箱即用。
但我意识到事实并非如此。
浏览文档,有 set_multi、get_multi 等方法。 这应该适用于 django 字典(键/值对)。
鉴于 Django 查询集不是传统的字典,那么与 pymemcached 一起使用的方法是什么。
这是目前如何使用它:
if not settings.DEBUG:
from pymemcache.client.base import Client
NODE_NAME = os.environ['NODE_NAME']
client = Client((NODE_NAME, 5000))
class ProductsListCacheAPIView(ListAPIView):
model = Product
serializer_class = TestProductSerializer
filter_backends= [SearchFilter, OrderingFilter]
permission_classes = [AllowAny]
search_fields = ['product_title', 'product_description', 'user__first_name', 'product_type', 'product_price', 'product_city']
pagination_class = ProductPageNumberPagination
def get_queryset(self, *args, **kwargs):
query = self.request.GET.get("search")
lookups = ()
.....
queryset_list = queryset_list.filter(lookups).distinct()
cache_key = 'my_api_marketplace_cache'
data = client.get(cache_key)
if data is None:
print('Getting marketplace fresh from database!')
data = queryset_list
client.set(cache_key, queryset_list, cache_time)
return data
这当然行不通。 似乎不像 django 缓存
from django.core.cache import cache (django.core.cache.backends.memcached.PyLibMCCache)
set 方法似乎只适用于 pymemcached 的字符串。
如何在此处使用 pymemcached 缓存 django 查询集?
简短的回答是,并非每个缓存都是查询缓存。 Django 缓存被优化为响应缓存(页面缓存),并以最少的配置工作以缓存完全呈现的页面。
此外,使用装饰器或正确调用缓存函数,您可以缓存可以序列化为字符串的内容,就像您发现的那样。
查询集缓存的用处很小:
查看您的案例,您属于第 3 类:您可以简单地缓存视图并让它依赖于搜索参数。 只缓存查询集没有任何好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.