404*_*404 1 python django optimization caching yql
我正在开发一个 Django 应用程序,用于从 YQL 检索一些信息 - 总共 - 主页本身有大约 5 个请求,其中 1 个是实时请求,其他是过去的数据请求 - 所以加载需要很多时间。
来自 API 调用的响应没有存储在我的数据库中,只是显示出来。我想通过缓存优化过去的数据获取部分,因此需要一些关于如何做同样的指导。
提前致谢。
嗯,首先,你的问题很糟糕,因为你没有具体说明你尝试过什么。但是缓存您将要显示的外部调用是一个好主意。
在Django文档有一个非常CLEA的如何设置缓存[R解释。一旦你设置好了(数据库缓存对于本地主机来说是最简单的,根据我的经验,memcached 用于任何接近生产的东西):
添加到settings.py:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 DatabaseCache 选项,请确保此时同步数据库。
现在,如果我们假设你的 API 调用有类似的东西:
scraped_data = external_api_call()
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
from django.core.cache import cache
cache_key = "match1"
cache.set(cache_key, scraped_data, None)
Run Code Online (Sandbox Code Playgroud)
我已将其分解为额外的步骤,并且通常不会单独定义 cache_key!最后的“无”将其设置为永不过期 - 您可以在那里设置自己的过期时间,以秒为单位。
如果您要动态定义缓存键,则可能执行以下操作:
from hashlib import sha256
from django.core.cache import cache
cache_key = sha256(str(variable1)+str(variable2))
cache.set(cache_key, stuff_stored, None)
Run Code Online (Sandbox Code Playgroud)
要从缓存中取回该信息,您只需执行以下操作:
stuff_i_want = cache.get(cache_key)
Run Code Online (Sandbox Code Playgroud)
同样,如果您想删除缓存项,只需:
cache.delete(cache_key)
Run Code Online (Sandbox Code Playgroud)