"优化查询"视频(Udacity web dev课程),缓存数据库查询

时间:2017-08-19 23:14:17

标签: python google-app-engine web webapp2

以下是我感到困惑的视频:https://www.youtube.com/watch?v=9UHKsiDznwg

大约6:12,您可以看到他用来缓存数据库查询的代码。我不明白为什么他使用字典来缓存查询。他设置的方式不会使字典只在“顶部”中存储一个值。他设定的关键。为什么他不把它存储在一个变量中呢?我也提到了主要代码。

CACHE = {}
def top_arts():
    key = 'top'
    if key in CACHE:
        arts = CACHE[key]
    else:
        logging.error("DB QUERY")
        arts = db.GqlQuery("SELECT * "
                           "FROM Art"
                           "WHERE ANCESTOR IS :1"
                           "ORDER BY created DESC"
                           "LIMIT 10",
                           art_key)
        arts = list(arts)
        CACHE[key] = arts
    return arts

1 个答案:

答案 0 :(得分:3)

该示例具有单个值,true,但它只是一个示例,通常在应用程序中有多个可缓存的值。该模式支持任意数量的缓存值。

这只是一个习惯问题 - 将整个缓存保持在一起,人们可以轻松地对其进行操作 - 比如查看缓存中的内容等等。它很难做到在整个代码中散布着一堆独立变量。

当然,这是一个主观问题。有些人可能会反对它,例如风险很大:如果在不同的地方意外地使用相同的密钥,缓存值会被破坏 - 很可能不是一个需要追逐的小错误。