按键名删除memcache以特定字符串开头(gae,python)

时间:2014-05-30 10:11:46

标签: python google-app-engine memcached

我使用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。

2 个答案:

答案 0 :(得分:2)

您无法通过前缀删除密钥;您只能删除特定的键,或者刷新所有缓存。

在这种情况下,您必须遍历所有页面ID以生成所有可能的键。将这些内容传递给delete_multi()

key_prefix参数只是一种方便的方法;如果它们都具有相同的前缀,您可以发送更短的“密钥”。如果您的所有密钥都以NDB9开头,请将其用作密钥前缀,并在没有该前缀的情况下发送密钥列表。当查找要删除的密钥时,memcached服务器会将前缀添加到每个密钥。

答案 1 :(得分:-1)

使用memcache存储所有其他密钥。

keys = [key1, key2, key3 ....]

当您需要按模式删除键时,迭代此值并使用delete_multi删除这些键