如何使用python-memcache从memcached导出所有键和值?

Fal*_*ken 11 python memcached

我想使用python-memcache从memcached服务器导出所有键和值.该模块中没有这样的功能.怎么办呢?

也许需要涉及"套接字"模块的更复杂的东西.

lrd*_*lrd 22

这将获取memcached服务器上的所有密钥,您可以使用任何memcached客户端库来获取每个密钥的值.

import telnetlib

def get_all_memcached_keys(host='127.0.0.1', port=11211):
    t = telnetlib.Telnet(host, port)
    t.write('stats items STAT items:0:number 0 END\n')
    items = t.read_until('END').split('\r\n')
    keys = set()
    for item in items:
        parts = item.split(':')
        if not len(parts) >= 3:
            continue
        slab = parts[1]
        t.write('stats cachedump {} 200000 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] END\n'.format(slab))
        cachelines = t.read_until('END').split('\r\n')
        for line in cachelines:
            parts = line.split(' ')
            if not len(parts) >= 3:
                continue
            keys.add(parts[1])
    t.close()
    return keys
Run Code Online (Sandbox Code Playgroud)


scy*_*ale 13

使用libmemcached套件中的memdumpmemcat实用程序.他们无法保证您将获得所有数据,但它们易于使用.

注:在Ubuntu/Debian的你可以intstalling在得到这些libmemcached-tools包,他们被称为memcdumpmemccat.

转储所有密钥:

memcdump --servers=localhost
Run Code Online (Sandbox Code Playgroud)

转储所有值:

memccat --servers=localhost `memcdump --servers=localhost`
Run Code Online (Sandbox Code Playgroud)

当然你仍然需要匹配键和值 - 我建议将键转储到文件,然后使用它作为输入memcat(这确保一致性).然后当然你需要拆分值 - 一个句号是我认为的分隔符 - 然后顺序配对键和值.某处可能有一个脚本......

  • memdump命令在Ubuntu Precise中称为"memcdump",在"libmemcached-tools"包中 (3认同)

var*_*tec 7

没有办法做到这一点.Memcache协议没有定义迭代密钥的任何命令.您必须知道检索值的关键.

  • @Falken:至于“ cachedump”,它不能保证能正常工作,只能用于调试,返回限制为1MB (2认同)