Django 中的外部 API 调用缓存

404*_*404 1 python django optimization caching yql

我正在开发一个 Django 应用程序,用于从 YQL 检索一些信息 - 总共 - 主页本身有大约 5 个请求,其中 1 个是实时请求,其他是过去的数据请求 - 所以加载需要很多时间。
来自 API 调用的响应没有存储在我的数据库中,只是显示出来。我想通过缓存优化过去的数据获取部分,因此需要一些关于如何做同样的指导。

提前致谢。

Wit*_*ail 5

嗯,首先,你的问题很糟糕,因为你没有具体说明你尝试过什么。但是缓存您将要显示的外部调用是一个好主意。

在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)