基於 dev shm的PHP快取類

2022-03-13 07:44:03 字數 1370 閱讀 7341

在《erlang和php間的socket通訊》中我提到做了基於/dev/shm的快取實現的效能測試,這裡分享一下測試中我封裝的乙個基於檔案系統的快取類,在linux上只需要把根目錄指向/dev/shm,就可以變成乙個基於記憶體的快取了,在windows上可以用普通檔案系統做測試。

需要先提醒大家一點,這個快取類只是乙個原型。只是提出基於/dev/shm的快取實現的可能性,並不是乙個完整的可以在生產環境使用的快取類。它還有很多有待完善和測試的地方,例如:資料的失效時間功能;併發情況下同乙個key的資料操作;批量移除和新增併發情況下發生;等等。

使用示例:

$data_1 = array(

'u_id' => 1,

'name' => 'dada'

);$data_2 = array(

'u_id' => 2,

'name' => 'wawa'

);$cache = new file_cache("/dev/shm");

$cache->set("user/1/data", $data_1); //儲存資料

$cache->set("user/2/data", $data_2); //儲存資料

$result = $cache->get("user/1/data"); //獲取資料

$cache->remove("user/1/data"); //刪除資料

$cache->remove_by_search("user", $data_1); //刪除user節點下所有資料

由於/dev/shm是把記憶體模擬成檔案系統,所以很容易就實現了層級式的快取管理。這對合理利用記憶體空間是很有幫助的。比如一些針對使用者的快取,可以通過層級式的儲存,在使用者退出系統時全部移除。再比如一些同表的不同業務邏輯檢視資料的快取,在表更新後,也可以批量的移除。

<?php

class file_cache

}public function set ($key, $value)

file_put_contents($file_name, serialize($value), lock_ex);

}public function get ($key)

return null;

}public function remove ($key)

}public function remove_by_search ($key)

}private function escape_key ($key)

function removedir($dirname)

}closedir($handle);

rmdir($dirname) ? true : false;

return $result;

}}?>

php檔案快取類

檔案快取類 class infobird cache file 設定快取基礎目錄 param string basepath return void throw exception public function setbasepath basepath this basepath basepath...

php 檔案快取類

1 檔案快取類23 class filecache 14 15 1617 設定快取 18public function set key,val,lefttime null 2829 得到快取 30public function get key 38return null 39 4041 判斷檔案是否...

php 快取工具類 實現網頁快取

php 快取工具類 實現網頁快取 php程式在抵抗大流量訪問的時候動態 往往都是難以招架,所以要引入快取機制,一般情況下有兩種型別快取 一 檔案快取 二 資料查詢結果快取,使用記憶體來實現快取記憶體 本例主要使用檔案快取。主要原理使用快取函式來儲存網頁顯示結果,如果在規定時間裡再次呼叫則可以載入快取...