我使用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
开头的任何其他项目。
在某些情况下,我只想清除所有分页缓存,但我不知道如何。
我想知道是否有办法按密钥名称删除memcache,该名称以NDB9
开头?
delete_multi(keys, seconds=0, key_prefix='', namespace=None)
但似乎key_prefix
只是添加到第一个参数中的每个key
,我想只通过key_prefix删除memcache。
答案 0 :(得分:2)
您无法通过前缀删除密钥;您只能删除特定的键,或者刷新所有缓存。
在这种情况下,您必须遍历所有页面ID以生成所有可能的键。将这些内容传递给delete_multi()
。
key_prefix
参数只是一种方便的方法;如果它们都具有相同的前缀,您可以发送更短的“密钥”。如果您的所有密钥都以NDB9
开头,请将其用作密钥前缀,并在没有该前缀的情况下发送密钥列表。当查找要删除的密钥时,memcached服务器会将前缀添加到每个密钥。
答案 1 :(得分:-1)
使用memcache存储所有其他密钥。
keys = [key1, key2, key3 ....]
当您需要按模式删除键时,迭代此值并使用delete_multi删除这些键