如果您将烧杯配置为保存到文件系统,您可以很容易地看到每个参数也被腌制了。例子:
tp3
sS'tags <myapp.controllers.tags.TagsController object at 0x103363c10> <MySQLdb.cursors.Cursor object at 0x103363dd0> apple'
p4
请注意,缓存“key”不仅包含我的关键字“apple”,还包含特定于实例的信息。这很糟糕,因为特别是“自我”在调用中不会相同。缓存每次都会导致丢失(并且会被无用的键填满。)
带有缓存注释的方法应该只具有与您想到的任何“键”相对应的参数。解释一下,假设您想要存储“John”对应于值 555-1212 的事实,并且您想要缓存它。您的函数不应将字符串以外的任何内容作为参数。你传入的任何参数都应该在调用之间保持不变,所以像“self”这样的东西会很糟糕。
完成这项工作的一种简单方法是内联该函数,这样您就不需要传递除密钥之外的任何其他内容。例如:
def index(self):
# some code here
# suppose 'place' is a string that you're using as a key. maybe
# you're caching a description for cities and 'place' would be "New York"
# in one instance
@cache_region('long_term', 'place_desc')
def getDescriptionForPlace(place):
# perform expensive operation here
description = ...
return description
# this will either fetch the data or just load it from the cache
description = getDescriptionForPlace(place)
您的缓存文件应类似于以下内容。请注意,只有“place_desc”和“John”被保存为键。
tp3
sS'place_desc John'
p4