有時我在測試或其它應用時希望能快速的清除memcache緩存,下面我來總結了幾種清除memcache中的緩存的一些方法,希望方法對大家有所哦
以前有同事需要我清除memcache緩存,我總是直接使用kill命令結束掉這個進程,後來才知道有更簡單的方法,來清除memcachd的緩存,記錄一下,以備不時之需:
1.首先使用ssh命令登錄到memcached所在服務器,命令如下:
代碼如下 復制代碼#ssh [email protected]
輸入root密碼後可登錄對應的服務器;
2.使用telnet命令後接tomcat服務配置文件中指定的memcached啟動端口:
代碼如下 復制代碼#telnet localhost 11211
之後顯示:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
3.此時輸入如下內容並回車即可清除緩存內容:
代碼如下 復制代碼flush_all
4.最後退出telnet使用quit命令,再exit退出遠程主機。
清除過期緩存
代碼如下 復制代碼 /**
memcache緩存的批量刪除方案
memcache默認只支持使用delete(key)和 flush_all,這兩種方法都太極端了,不能滿足用戶的特定需求,如:批量刪除‘aaaaaaaa_'開頭的所有緩存,這個時候該怎麼辦?
1 getExtendStats 遍歷所有item,刪除指定的key(不推薦)
網上有對應的php代碼和perl程序,感興趣的可以看看,在本地測試時可以使用,但是在真是服務器上請不要使用。
2 memcache結合DB
方法:每次set緩存時,將key值存入數據庫,在要刪除緩存時查詢數據庫,查詢出對應的信息,在memcache中將其刪除
缺點:浪費數據褲磁盤
3 memcache偽命名空間(推薦)
memcache默認不提供命名空間,但可以設置一個全局變量,來模擬命名空間,代碼如下:
<?php
//生成一個用來保存 namespace 的 key
$ns_key = $memcache->get("foo_namespace_key");
//如果 key 不存在,則創建,默認使用當前的時間戳作為標識
if($ns_key===false) $memcache->set("foo_namespace_key",time());
//根據 namespace_key 生成真正的 key,確保是唯一的key值
$my_key = "foo_".$ns_key.$otherParms;
//然後利用拼接的my_key值設置你需要緩存的各種數據
$memcache->set($my_key,$value,false,expire);
//或者key值獲得以前存儲的緩存
$memcaceh->get($my_key);
//需要刪除整個 namespace 裡的對象的時候,如:更改數據庫或者刪除某些信息後
//將ns_key的值改變,則以後在訪問緩存時,以前時間的將永遠不會別訪問到,以此來實現批量刪除緩存
$memcache->set("foo_namespace_key",time());
?>
以上是個人見解,歡迎拍板