我需要將memcached複製到另一個鍵值系統(couchbase)。我如何查詢memcached服務器的內容以獲取內容列表,以便我可以複製它?如何使用php查詢memcached以獲取存儲中所有密鑰的列表?
7
A
回答
11
內存緩存> = 2.0.0
function getMemcacheKeys() {
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211)
or die ("Could not connect to memcache server");
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');
foreach($allSlabs as $server => $slabs) {
foreach($slabs AS $slabId => $slabMeta) {
$cdump = $memcache->getExtendedStats('cachedump',(int)$slabId);
foreach($cdump AS $keys => $arrVal) {
if (!is_array($arrVal)) continue;
foreach($arrVal AS $k => $v) {
echo $k .'<br>';
}
}
}
}
}
0
感謝您的示例代碼
下面是如何
我使用一個輔助類,以除去以除去特定的鍵或多個鍵緩存,所以你必須給函數一個參考memcache連接
public static function removePriceCache(&$memcache, &$cacheAvailable) {
if ($cacheAvailable == true) {
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');
foreach ($allSlabs as $server => $slabs) {
foreach ($slabs AS $slabId => $slabMeta) {
$cdump = $memcache->getExtendedStats('cachedump', (int) $slabId);
foreach ($cdump AS $keys => $arrVal) {
if (!is_array($arrVal))
continue;
foreach ($arrVal as $k => $v) {
//echo $k . '<br>';
if (stripos($k, "Price") !== false) {
$memcache->delete($k);
}
}
}
}
}
}
}
這將刪除所有包含單詞「價格」在它的鍵..
6
所有這些對內存緩存解決方案,因此在這裏是爲Memcached的
function getMemcachedKeys($host = '127.0.0.1', $port = 11211)
{
$mem = @fsockopen($host, $port);
if ($mem === FALSE) return -1;
// retrieve distinct slab
$r = @fwrite($mem, 'stats items' . chr(10));
if ($r === FALSE) return -2;
$slab = array();
while (($l = @fgets($mem, 1024)) !== FALSE) {
// sortie ?
$l = trim($l);
if ($l == 'END') break;
$m = array();
// <STAT items:22:evicted_nonzero 0>
$r = preg_match('/^STAT\sitems\:(\d+)\:/', $l, $m);
if ($r != 1) return -3;
$a_slab = $m[1];
if (!array_key_exists($a_slab, $slab)) $slab[$a_slab] = array();
}
// recuperer les items
reset($slab);
foreach ($slab AS $a_slab_key => &$a_slab) {
$r = @fwrite($mem, 'stats cachedump ' . $a_slab_key . ' 100' . chr(10));
if ($r === FALSE) return -4;
while (($l = @fgets($mem, 1024)) !== FALSE) {
// sortie ?
$l = trim($l);
if ($l == 'END') break;
$m = array();
// ITEM 42 [118 b; 1354717302 s]
$r = preg_match('/^ITEM\s([^\s]+)\s/', $l, $m);
if ($r != 1) return -5;
$a_key = $m[1];
$a_slab[] = $a_key;
}
}
// close
@fclose($mem);
unset($mem);
// transform it;
$keys = array();
reset($slab);
foreach ($slab AS &$a_slab) {
reset($a_slab);
foreach ($a_slab AS &$a_key) $keys[] = $a_key;
}
unset($slab);
return $keys;
}
相關問題
- 1. 如何獲得列表中所有密鑰的密鑰列表?
- 2. PHP獲取memcached的所有密鑰始終返回false
- 3. 檢索java中memcached中的所有對象密鑰存儲
- 4. 如何使用php redis獲取redis中的所有密鑰?
- 5. 列出所有memcached密鑰/值
- 6. PHP中使用memcached來存儲查詢數據,有事商量
- 7. Membase - 使用TAP獲取所有密鑰的列表
- 8. 如何獲得用pycassa存儲在Cassandra列族中的所有密鑰?
- 9. 使用散列表僅存儲密鑰?
- 10. ActiveRecord:在單個查詢中獲取組後的所有密鑰
- 11. Memcached:如何跟蹤存儲在服務器中的密鑰
- 12. 按分區和行密鑰對列表查詢Azure表存儲
- 13. Kohana 3 - 如何使用memcached獲取緩存查詢結果?
- 14. 如何在memcached中存儲大列表?
- 15. 有沒有辦法在couchabase中提取memcached存儲桶的頂級密鑰
- 16. 在Django中,如何清除所有的memcached密鑰和值?
- 17. indexeddb從對象存儲獲取所有密鑰
- 18. 如何使用java在密鑰註冊表中存儲密碼?
- 19. 使用IN運算符的BigTable查詢獲取所有用戶組密鑰
- 20. PHP:如何使所有陣列具有相同的密鑰
- 21. 如何從OIM使用SQL查詢獲取IT資源密鑰?
- 22. 使用Java從MacOS X密鑰存儲區獲取私鑰
- 23. Cassandra使用PHP SimpleCassie獲取所有密鑰
- 24. 如何序列化PHP SplHeap以存儲到memcached中
- 25. SSL中使用的信任存儲和密鑰存儲如何?
- 26. Enum:獲取密鑰列表
- 27. PHP Memcached密鑰和增加版本號以使緩存失效 - 如何?
- 28. 如何在PHP中使用此JSON中的所有密鑰?
- 29. 如何以編程方式使用Java來獲取Azure存儲帳戶密鑰?
- 30. 如何使用crediscache獲取所有redis密鑰
我只是想在這裏指出,雖然這個工程cachedump是真的意味着用於memcached調試目的,並不打算像這樣使用。未來版本的memcached也可能不支持cachedump。 (請參閱評論8,來自核心memcached貢獻者之一http://code.google.com/p/memcached/issues/detail?id=187) – mikewied 2012-03-25 03:36:38
Cachedump似乎沒有得到所有的密鑰(我一直試圖做到這一點,然後碰到這個鏈接):http://code.google.com/p/memcached/wiki/NewProgrammingFAQ – jonderry 2012-12-19 00:54:28
一個很小但很大的差異,這對我來說是**限制**參數在' getExtendedStats'函數,默認值是_just_ 100. 更新: '$ cdump = $ memcache-> getExtendedStats('cachedump',(int)$ slabId,100000000);' – matija 2016-07-07 10:00:31