Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;“优化查询”;视频(Udacity web开发课程),缓存数据库查询_Python_Google App Engine_Web_Webapp2 - Fatal编程技术网

Python &引用;“优化查询”;视频(Udacity web开发课程),缓存数据库查询

Python &引用;“优化查询”;视频(Udacity web开发课程),缓存数据库查询,python,google-app-engine,web,webapp2,Python,Google App Engine,Web,Webapp2,以下是我感到困惑的视频: 大约在6:12,您可以看到他用来缓存数据库查询的代码。我不明白的是他为什么用字典来缓存查询。他设置的方式不会让字典在他设置的“top”键上只存储一个值。他为什么不把它存储在一个变量中呢?我还包括了讨论中的主要代码 CACHE = {} def top_arts(): key = 'top' if key in CACHE: arts = CACHE[key] else: logging.error("DB QUER

以下是我感到困惑的视频:

大约在6:12,您可以看到他用来缓存数据库查询的代码。我不明白的是他为什么用字典来缓存查询。他设置的方式不会让字典在他设置的“top”键上只存储一个值。他为什么不把它存储在一个变量中呢?我还包括了讨论中的主要代码

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

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

这只是一个习惯问题——将整个缓存放在一起,人们可以轻松地对其进行操作——比如查看缓存中的内容,等等。如果代码中分散着一堆独立变量,那么要做到这一点就相当困难了

当然,这是一个主观问题。有些人可能会反对它,比如说它有风险:如果不小心在不同的地方使用同一个键,缓存值就会被破坏——很可能不是一个可以追踪的小错误