通用高速緩衝器 CMSPAD Cache

2021-08-29 11:07:20 字數 2544 閱讀 1245

php中的高速緩衝器,對高負載來的**來說是乙個非常需要的元件。其中最經典的使用案例就是使用者會話(session)的高速訪問:如果使用預設的基於檔案的會話控制代碼,負載量較大時會產生大量的io操作,導致系統執行效率降低;而使用基於資料庫的會話控制代碼,雖然效能會得以提高,但負載量大時,還是容易給資料庫伺服器造成負擔。那如何才能調整會話控制代碼來使php最優化呢?

[quote]答案是:使用高速緩衝器![/quote]

市面上現有的php高速緩衝元件很多,常用的有 eaccelerator、xcache、memcache(這個東東robin經常提到)、apc等。

這就產生了乙個問題:當**訪問量較小時,使用了一種緩衝元件,而訪問量增大時可能因為效能問題轉到另乙個緩衝元件中,如果負載非常大時,估計還要自己寫個緩衝元件來適應**的需要。那麼,開發人員需要不斷更新**程式以適應在不同的緩衝元件。

能不能使用一種簡單的方法來使用緩衝元件呢?答案是肯定的,cmspad團隊中有專門負責研發通用緩衝元件的子專案,叫做 cmspad cache。下面看看 cmspad cache 的一些基本使用情況:

1. 建立緩衝引擎:

[code]import('cache.cacheengine');

$cacheengine = new cacheengine('eaccelerator'); // 使用eaccelerator來作為預設的緩衝器。

$cacheengine = new cacheengine('xcache'); // 使用xcache來作為預設的緩衝器。

$cacheengine = new cacheengine('memcache'); // 使用memcache來作為預設的緩衝器。

$cacheengine = new cacheengine('apc'); // 使用alternative php cache來作為預設的緩衝器。

$cacheengine = new cacheengine('zendplatform'); // 使用zend platform來作為預設的緩衝器。

$cacheengine = new cacheengine('filesystem'); // 使用本地檔案系統來作為預設的緩衝器。

$cacheengine = new cacheengine('database'); // 使用cmspad內建的資料庫元件來作為預設的緩衝器。

//除此之外,您還可以不指定預設緩衝器,讓系統自己來選擇

$cacheengine = new cacheengine(); // 系統根據已載入的php擴充套件庫來自行指定緩衝器。[/code]

2. 使用緩衝引擎:

[code]$cacheengine->set('name', 'value'); // 設定永不過期的資料.

$cacheengine->set('name', 'value', 60); // 設定過期時間為60秒的資料.

$cacheengine->get('name'); // 獲取名稱為name的值,如果該值不存在或已過期,則返回null。

$cacheengine->del('name'); // 從緩衝中刪除名稱為 name 的資料。

$cacheengine->has('name'); // 檢查名稱為 name 的資料是否存在,如果不存在或已過期,則返回 false.[/code]

使用起來還是相當簡單的吧,下面就有個問題了,如果某些牛人或組織自己開發了乙個緩衝元件,那怎麼才能做cmspad cache的介面卡呢?

3. 自定義緩衝元件介面卡的開發:

[code]import('cache.cacheprovider');

class cmspad_cache_mycustomcache extends cacheprovider

public function get($key)

public function del($key)

public function has($key)

}[/code]

把上面的**儲存到 inc/cache/providers/mycustomcache.php 檔案中,通過[code]$cacheengine = new cacheengine('mycustomcache');[/code] 即可使用。

下面的給出一段memcache的實現類,一般比較複雜的緩衝元件都可以這麼實現:

[code]class cmspad_cache_memcache extends cacheproviderelse

if(isset($config['port']))else

if(isset($config['timeout']))else

if($port)else

}else

}public function __destruct()

public function set($name, $value, $ttl = 0)

public function get($name)

public function del($name)

public function has($name)

}[/code]

以上**儲存在 inc/cache/providers/memcache.php 中。

高速緩衝器 cache 基本概念

一是由於i o裝置與cpu之間會爭訪記憶體,導致降低cpu的效率,則可以在cpu與主存之間加上一級快取.二是,因為摩爾定律的原因cpu的速度遠遠高於主存的速度,再加上儲存體系的原因,越快速度的儲存器成本越高,就需要乙個快取記憶體來解決主存與cpu速度不匹配的問題 cache出現使cpu不直接訪問主存...

緩衝器溢位指南

push ebp 0x8048441 mov esp,ebp 0x8048443 mov 0xc ebp eax 0x8048446 add 0x4,eax 0x8048449 mov eax edx 0x804844b push edx 0x804844c call 0x8048410 0x804...

ByteBuffer 緩衝器(一)

public static void main final string args bytebuffer bytebuffer bytebuffer.allocate 10 system.out.println 初始位置 bytebuffer.position system.out.println ...