按特定字符串前缀删除memcache键名 (gae,python)
我用 Google App Engine 搭建了一个博客,并把很多内容存储在了内存缓存中,包括分页的文章。
存储这些页面的关键是使用查询对象和页面索引:
@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
开头的键名来删除内存缓存?
是的,我找到了一种这样的功能,
delete_multi(keys, seconds=0, key_prefix='', namespace=None)
但似乎 key_prefix
只是加在第一个参数的每个 key
上,而我想要的是只通过 key_prefix
来删除内存缓存。
2 个回答
-1
使用memcache来存储其他所有的键。
keys = [key1, key2, key3 ....]
当你需要根据某种模式删除键时,可以遍历这个值,然后使用delete_multi来删除这些键。
2
你不能通过前缀来删除键;你只能删除特定的键,或者清空所有缓存。
在这种情况下,你需要遍历所有页面的ID,以生成所有可能的键。然后把这些键传给delete_multi()
。
key_prefix
这个参数只是为了方便;如果你的所有键都有相同的前缀,你可以发送更短的“键”。比如,如果你所有的键都是以NDB9
开头的,就可以把这个作为前缀,然后发送没有这个前缀的键列表。当memcached服务器查找要删除的键时,会自动把前缀加到每个键上。