php memecache 緩衝分組疑惑
在php memcache緩衝裡,我只找到 add,delete兩種方法添加或刪除緩衝,沒有分組功能
像JAVA版 memecache有分組功能,如我用一個使用者日記分組 當我更新了日記,可以刪除此日記分組緩衝,我的個人日記列表,我的WAP版日記列表也更新
我想有如何功能
add("cacheGroup","cacheName1",$value1);
add("cacheGroup","cacheName2",$value2);
add("cacheGroup","cacheName3",$value3);
deleteGroup("cacheGroup");
然後上面三個緩衝都清除
php memecache緩衝API如下
Memcache::add — 添加一個值,如果已經存在,則返回false
Memcache::addServer — 添加一個可供使用的伺服器位址
Memcache::close — 關閉一個Memcache對象
Memcache::connect — 建立一個Memcache對象
memcache_debug — 控制調試功能
Memcache::decrement — 對儲存的某個key中的值進行減法操作
Memcache::delete — 刪除一個key值
Memcache::flush — 清除所有緩衝的資料
Memcache::get — 擷取一個key值
Memcache::getExtendedStats — 擷取進程池中所有進程的運行系統統計
Memcache::getServerStatus — 擷取運行伺服器的參數
Memcache::getStats — 返回伺服器的一些運行統計資訊
Memcache::getVersion — 返回啟動並執行Memcache的版本資訊
Memcache::increment — 對儲存的某個key中的值進行加法操作
Memcache::pconnect — 建立一個Memcache的持久連線物件
Memcache::replace — R對一個已有的key進行覆寫操作
Memcache::set — 添加一個值,如果已經存在,則覆寫
Memcache::setCompressThreshold — 對大於某一大小的資料進行壓縮
Memcache::setServerParams — 在運行時修改伺服器的參數
------解決方案--------------------
add("cacheGroup","cacheName1",$value1);
add("cacheGroup","cacheName2",$value2);
add("cacheGroup","cacheName3",$value3);
deleteGroup("cacheGroup");
這樣也就是一個key 控制一數組
class mem
{
public $memcache=null;
public $array=array();
public function __construct()
{
$this->memcache = new Memcache;
$this->memcache->connect('localhost', 11211) or die ("Could not connect");
}
public function add($parent="",$key="",$value="")
{
$this->array[$key]=$value;
$this->memcache->set($parent,$this->array,false,500);
}
public function deleteGroup($key=null)
{
$this->memcache->delete($key);
}
public function get($key=null)
{
return $this->memcache->get($key);
}
}
$mem=new mem();
$mem->add("cacheGroup","cacheName1","1");
$mem->add("cacheGroup","cacheName2","2");
$mem->add("cacheGroup","cacheName3","3");
//$mem->deleteGroup("cacheGroup");
var_Dump($mem->get('cacheGroup'));
------解決方案--------------------
引用:
1、
你在 setGroupExpire 使用 parent::set($group, $expire); 這個不就是添加一個緩衝嗎?他怎麼成了設定緩衝時間?
這裡其實是用了一個小技巧,來避免使用一個數組(作為一個group)存放內容,如果你的資料過多的話,並且group裡元素個數也很多的話,會頻繁更新同一個數組的內容,並且不見得就是要讀取一個元素時就是要讀取全部的資料。
這種機制不是靠MC(memcache的縮寫,下同)來控制緩衝的到期時間,而是靠自己控制是否緩衝到期!
設定這個緩衝的內容,就是整個組的到期時間。因為是靠
public function getGroup($group, $name) {
// 如果已經到期
if(parent::get($group) < time()) {
return null;
}
return parent::get($group.'_'.$name);
}
上面的代碼來判斷是否到期,這樣所有這個group裡的資料,都有了統一的時間驗證標準,只要parent::get($group) < time()成立,即便MC中有資料或者說資料沒有到期,我們也認為到期了