国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

清除memcache中的緩存一些方法總結

2024-05-04 21:48:28
字體:
來源:轉載
供稿:網友

以前有同事需要我清除memcache緩存,我總是直接使用kill命令結束掉這個進程,后來才知道有更簡單的方法,來清除memcachd的緩存,記錄一下,以備不時之需.

1.首先使用ssh命令登錄到memcached所在服務器,命令如下:

#ssh root@192.168.1.1

輸入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退出遠程主機.

php清除過期緩存,代碼如下:

  1. /** 
  2. * Memcached的過期內存回收 
  3. */ 
  4. class mem_dtor extends Memcache 
  5. private $server_id
  6. public function __construct($host,$port
  7. $this->server_id = "$host:$port"
  8. $this->connect($host,$port); 
  9. // 回收所有過期的內存 
  10. public function gc() 
  11. $t = time(); 
  12. $_this = $this
  13. $func = function($key,$infouse ($t,$_this
  14. if($info[1] - $t delete($key); 
  15. }; 
  16. $this->lists($func); 
  17. // 查看所有緩存內容的信息 
  18. public function info() 
  19. $t = time(); 
  20. $func = function($key,$infouse ($t
  21. echo $key,' => Exp:',$info[1] - $t,"n"//查看緩存對象的剩余過期時間 
  22. }; 
  23. $this->lists($func); 
  24. private function lists($func
  25. $sid = $this->server_id; 
  26. $items = $this->getExtendedStats('items'); //獲取memcached狀態 
  27. foreach($items[$sid]['items'as $slab_id => $slab//獲取指定server id 的 所有Slab 
  28. $item = $this->getExtendedStats('cachedump',$slab_id,0); //遍歷所有Slab 
  29. foreach($item[$sidas $key => $info//獲取Slab中緩存對象信息 
  30. {//開源代碼Vevb.com 
  31. $func($key,$info); 
  32. $mem = new mem_dtor('127.0.0.1',11211); 
  33. $mem->info();//查看狀態 
  34. $mem->gc(); //回收  

memcache緩存的批量刪除方案

memcache默認只支持使用delete(key)和 flush_all,這兩種方法都太極端了,不能滿足用戶的特定需求,如,批量刪除‘aaaaaaaa_'開頭的所有緩存,這個時候該怎么辦? 

1 getExtendStats 遍歷所有item,刪除指定的key(不推薦)

網上有對應的php代碼和perl程序,感興趣的可以看看,在本地測試時可以使用,但是在真是服務器上請不要使用.

2 memcache結合DB

方法:每次set緩存時,將key值存入數據庫,在要刪除緩存時查詢數據庫,查詢出對應的信息,在memcache中將其刪除,缺點:浪費數據褲磁盤.

3 memcache偽命名空間,推薦

memcache默認不提供命名空間,但可以設置一個全局變量,來模擬命名空間,代碼如下:

  1. <?php    
  2. //生成一個用來保存 namespace 的 key    
  3. $ns_key = $memcache->get("foo_namespace_key");    
  4.     
  5. //如果 key 不存在,則創建,默認使用當前的時間戳作為標識  
  6. if($ns_key===false) $memcache->set("foo_namespace_key",time());    
  7.     
  8. //根據 namespace_key 生成真正的 key,確保是唯一的key值    
  9. $my_key = "foo_".$ns_key.$otherParms;  
  10.  
  11.  
  12. //然后利用拼接的my_key值設置你需要緩存的各種數據  
  13. $memcache->set($my_key,$value,false,expire);  
  14.  
  15.  
  16. //或者key值獲得以前存儲的緩存  
  17. $memcaceh->get($my_key);  
  18.     
  19.     
  20. //需要刪除整個 namespace 里的對象的時候,如:更改數據庫或者刪除某些信息后  
  21. //將ns_key的值改變,則以后在訪問緩存時,以前時間的將永遠不會別訪問到,以此來實現批量刪除緩存   
  22.  $memcache->set("foo_namespace_key",time());  
  23. ?>   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 图们市| 石楼县| 大洼县| 南昌市| 泾阳县| 云龙县| 葫芦岛市| 盈江县| 建宁县| 竹溪县| 山阳县| 石棉县| 会泽县| 榆中县| 波密县| 景德镇市| 云安县| 宜兴市| 东源县| 左云县| 会理县| 合江县| 银川市| 诸暨市| 松潘县| 东源县| 县级市| 宽城| 绥滨县| 抚州市| 阿瓦提县| 屏边| 铜陵市| 安泽县| SHOW| 浏阳市| 广昌县| 定安县| 丰都县| 射洪县| 永济市|