首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Memcached 最快清空指令:flush_all 與 telnet 操作詳解

     編輯:PHP 相關知識

一鍵清空所有 Key

Memcached 不支援 FLUSHDB 單資料庫清空,flush_all 會標記**所有** Slab 中的 Item 為過期,立即生效,但記憶體不會立即釋放(需等待 LRU 淘汰或重啟)。

方法一:Netcat 單行指令(適合腳本自動化)

# 預設 11211 埠
echo "flush_all" | nc localhost 11211
# 輸出: OK

方法二:Telnet 互動模式(適合除錯確認)

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

flush_all
OK

# 確認統計
stats
STAT curr_items 0
STAT bytes 0
...

quit
Connection closed by foreign host.

重要特性說明

  • 非同步延遲刪除:flush_all 僅更新全域時間戳,實際記憶體回收發生在後續 get/set 操作中
  • 選擇性延遲:flush_all 10 可延遲 10 秒執行(緩衝突發流量)
  • 多實例批次:搭配 pssh 或 Ansible 並行清空叢集所有節點

生產環境替代方案

需求方案優點缺點
清空特定前綴SCAN + DELETE 腳本精確控制需遍歷 Key,耗時
完全釋放記憶體重啟 memcached 服務乾淨徹底服務中斷、冷啟動慢
熱資料保留改用 Redis + FLUSHDB支援多 DB 隔離架構變更成本高

PHP 程式碼封裝

<?php
function memcachedFlushAll(string $host = '127.0.0.1', int $port = 11211): bool
{
    $fp = @fsockopen($host, $port, $errno, $errstr, 2);
    if (!$fp) return false;

    fwrite($fp, "flush_all\r\n");
    $resp = fgets($fp, 128);
    fclose($fp);

    return trim($resp) === 'OK';
}

// 批次清空多台
$servers = ['10.0.1.1', '10.0.1.2', '10.0.1.3'];
foreach ($servers as $srv) {
    echo "{$srv}: " . (memcachedFlushAll($srv) ? 'OK' : 'FAIL') . "\n";
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved