我用gae建立了一个博客,并在memcache中存储了许多条目,包括分页条目。
存储这些页面的关键是使用查询对象和pageindex:
@property
def _query_id(self):
if not hasattr(self, '__query_id'):
hsh = hashlib.md5()
hsh.update(repr(self.query))
self.__query_id = hsh.hexdigest()
return self.__query_id
def _get_cache_key(self, page):
return '%s%s' % (self._query_id, page)
它将显示在管理控制台中,如:NDB9:xxxxxx
,除此之外,我还存储了以sitename obj
开头的任何其他项目。
在某些情况下,我只想清除所有分页缓存,但不知道如何清除。我想知道是否有办法按以NDB9
开头的键名删除memcache?
是的,我发现了这样的功能,
delete_multi(keys, seconds=0, key_prefix='', namespace=None)
但是似乎key_prefix
只是添加到第一个参数中的每个key
,我只想通过key_prefix删除memache。
不能按前缀删除键;您只能删除特定的密钥,或刷新缓存中的所有密钥。
在这种情况下,您必须在所有页面ID上循环以产生所有可能的键。将这些传递给delete_multi()
。
key\u prefix
参数只是一种方便的方法;如果它们的前缀相同,则可以发送较短的“密钥”。如果您的所有密钥都以NDB9
开头,请将其用作密钥前缀,然后发送一个没有该前缀的密钥列表。当查找要删除的密钥时,memcached服务器会将前缀添加到每个密钥中。
使用memache存储所有其他密钥。
keys = [key1, key2, key3 ....]
当您需要按模式删除键时,迭代该值并使用delete_multi删除这些键