将所有内存缓存密钥转储到文件中的最简单方法是什么?

编程入门 行业动态 更新时间:2024-10-25 14:33:44
本文介绍了将所有内存缓存密钥转储到文件中的最简单方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

这仅来自具有大约2000万个密钥(没有到期)和大约2G数据的单个Memcached服务器.

This is from just a single memcached server with around 20M keys (no expiry) and around 2G of data.

将所有键/值对转储到平面文件中的最简单方法是什么?我首先看了java net.spy.memcached.MemcachedClient,但是此客户端不支持获取所有密钥(我认为).如果我有所有键的列表(我没有),则可以轻松地使用此客户端获取所有值.

What's the easiest way to get a dump of all the key/value pairs into a flat file? I first looked at the java net.spy.memcached.MemcachedClient, but this client does not support getting all keys (I think). If I had a list of all keys (which I don't), I could easily use this client to get all of the values.

我知道我可以使用某些telnet命令(例如telnet localhost 11211;统计信息项;统计信息cachedump)来获取所有密钥,但是我不清楚如何可靠地自动执行此操作.

I know I can get all keys using some telnet commands (e.g., telnet localhost 11211; stats items; stats cachedump ), but it's not clear to me how to automate this robustly.

这是我在我的机器上的玩具内存缓存服务器上进行此操作的工作.看来可行,但我只在memcached中放了两个键,因此希望该方法可以扩展:

Here's what I did to get this working on a toy memcached server on my machine. It seems to work but I only put two keys in memcached, so hopefully this method will scale ok:

shell命令:

sudo yum install memcached sudo /etc/init.d/memcached restart # maybe unnecessary sudo yum install php sudo yum install php-pecl-memcache sudo service httpd reload

php脚本,基于此:

php script, based on this:

<?php $memcache = new Memcache(); $memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); $list = array(); $allSlabs = $memcache->getExtendedStats('slabs'); $items = $memcache->getExtendedStats('items'); foreach($allSlabs as $server => $slabs) { foreach($slabs AS $slabId => $slabMeta) { if (!is_int($slabId)) { continue; } $cdump = $memcache->getExtendedStats('cachedump', (int) $slabId, 100000000); foreach($cdump AS $server => $entries) { if ($entries) { foreach($entries AS $eName => $eData) { print_r($eName); print_r(":"); $val = $memcache->get($eName); print_r($val); print_r("\n"); } } } } } ?>

上面的脚本似乎没有返回所有映射.如果我插入行count($entries),即使将limit参数设置为100M,它也仅返回50k多一点,但是从telnet执行stats items则显示超过5M条目.有谁知道为什么会这样?

The above script does not seem to return all of the mappings. If I insert the line count($entries), it only returns a little over 50k, even with the limit parameter set to 100M, but executing stats items from telnet shows over 5M entries. Does anyone know why this might be the case?

此> 链接表明,cachedump无法从memcached获取所有密钥.我已经达到了大约5万个键的限制,这些键是由cachedump,此PHP脚本或类似于Zach Bonham提供的链接中的一个perl脚本返回的.有什么办法解决吗?

This link suggests that cachedump doesn't get all keys from memcached. I've hit a limit of around 50k keys that are returned either by cachedump, this PHP script, or a perl script similar to one in the link provided by Zach Bonham. Is there any way around this?

推荐答案

免责声明:我不知道自己在做什么,听起来像是一个有趣的问题.

您看到这篇文章了吗? 如何从Memcache中转储密钥" ,作者是Lars Windolf.

Did you see this article? "How to Dump Keys from Memcache" by Lars Windolf.

摘自文章:

Memcache本身提供了进入数据峰值的方法.协议 提供命令以探查由平板组织的数据 (给定大小范围的数据类别.有些重要 局限性:

Memcache itself provide the means to peak into the data. The protocol provides commands to peak into the data that is organized by slabs (categories of data of a given size range. There are some significant limitations though:

  • 您只能转储每个slab类的密钥(具有大致相同内容大小的密钥)
  • 每个平板类只能转储一页(1MB数据)
  • 这是一个非官方功能,随时可以删除.
  • You can only dump keys per slab class (keys with roughly the same content size)
  • You can only dump one page per slab class (1MB of data)
  • This is an unofficial feature that might be removed anytime.

有效地,它需要一些有关内存缓存如何将数据存储在内存中的知识(我不知道).您需要找到每个"slab",然后可以转储该slab的密钥,然后最终转储那些密钥的值.

Effectively, it requires some knowledge of how memcache stores data in memory (which I don't). You need to find each 'slab', then you can dump the keys for that slab, and then ultimately, the values for those keys.

本文中有一个工具部分,该部分使用各种语言来转储至少键,但是只有perl脚本会转储键和值.

There is a tools section in the article which uses various languages to dump at least the keys, but only the perl script dumps both keys and values.

更多推荐

将所有内存缓存密钥转储到文件中的最简单方法是什么?

本文发布于:2023-10-28 19:51:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1537611.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:密钥   最简单   缓存   内存   文件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!