當前位置:首頁 » 編程語言 » memcachephp類

memcachephp類

發布時間: 2025-03-17 11:40:04

㈠ Xcache和memcache選哪個好

memcache和 Xcache 是php的2個緩存工具。PHP5.5以來,自帶有 Zend Opcache ,不過默認沒啟用。
這些緩存器的原理:

引用
把PHP執行後的數據緩沖到內存中從而避免重復的編譯過程,能夠直接使用緩沖區已編譯的代碼從而提高速度,降低伺服器負載,它們的效率是顯而易見的,像drupal這種龐大的CMS,每次打開一個頁面要調用數十個PHP文件,執行數萬行代碼,效率可想而知

然而Opcache 只自動緩存代碼,它沒有開放一個自定義緩存的API,要用到用戶緩存的話還得用上Xcache或者memcache。
Xcache是中國人所做,看起來很牛叉,但是在實際應用中發現這個東西太不穩定了,光用它作代碼緩存(後台自動緩存PHP代碼),竟然有時候會使得整個PHP進程都當掉。然後也試了Xcache的用戶緩存,API文檔寫得真夠殘的,好在還能用,但萬沒有想到,在fastcgi模式下,緩存命中率低得可憐,用和沒用基本上差不多,明明緩存了,後一個請求過來一查卻說沒緩存,可能延時個幾秒後才得知這個已經緩存了,才能取出緩存內容。這玩意到底仔細測試沒有?我用的是3.1.0官方正式版Xcache在PHP 5.5 里作的測試,簡直就是個廢物!還記得以前在PHP5.2裡面也用它過,莫名其妙的請求失敗也時有出現。現在直接不敢再用……

相比這個XCache,memcache穩定得多。題外話:memcached和memcache又有點不同,memcached是memcache的守護進程,但是PHP中也有memcached的擴展。這兩個說實話是讓人頭暈不知道是什麼區別,其實我看來就是調用memcache的封裝模式不太一樣而已。具體哪些調用上的不同,參考 http://pecl.php.net/package/memcache 和http://pecl.php.net/package/memcached 。一看就知道memcached要多一些API函數調用,功能也更強大一些。而實際上基礎應用的話memcache已經足夠。

memcache的使用首先要有它的服務(也就是memcached進程)在跑,這個是一個小小的軟體,一般是用C++編譯,可以部署在與PHP同一台也可以不同,甚至可以分布式部署幾個memcached服務在不同的伺服器上。而PHP的memcached只是它的客戶端而已。memcached本身沒有PHP代碼緩存功能,現升到PHP5.5後直接交給自帶Opcache 了。一般用它作用戶緩存。經過實際開發,memcached穩定性是非常高的,只要有緩存,命中率幾乎在99%以上。PHP官方下提供了它的擴展可直接使用:http://pecl.php.net/package/memcache 連Windows版的DLL也直接在那裡了,不用自己再編譯。Windows下編譯這些東西真是麻煩得很啦~

綜上memcache更加穩定,推薦使用。Xcache真要用的話,還是老實在本地先測試一下再說。
此外,微軟Windows下PHP可以使用Wincache,這個的穩定性沒得說的,而且也不用守護進程。但是微軟沒能編譯適用於PHP 64位的DLL。要想通用和跨平台,memcache是首選!!

㈡ PHP緩存技術的PHP緩存類型

1、資料庫數據緩存技術:
數據緩存:這里所說的數據緩存是指資料庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。和memcache技術。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
常用的資料庫數據緩存技術有:
1.序列化(串列化)緩存
2.JSON緩存
3.XML緩存
4.Array緩存
2、頁面緩存:
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能,例如smarty模板、thinkphp框架)

㈢ php 中的 memcache 是什麼 怎麼用的 越詳細越好,求大神 在線等

memcache 本身是一款分布式的高速緩存系統,以 key-value 的形式常駐內存,一般用來做網站或者資料庫的緩存使用。
特別是對以下場景非常適合用 memcache 來做緩存:
1. 頻繁訪問的數據2. 安全性要求比較低的數據
3. 更新比較頻繁的小表(用戶狀態表、物品庫存等)

㈣ thinkphp裡面怎樣配置memcache

1、下載並安裝memcache (1)window下安裝memcache. 下載memcached.exe 到d:/memcached/memcached.exe.在運行cmd 輸入 d:/memcached/memcached.exe -d install安裝 。 (2)運行d:/memcached/memcached.exe -d start 啟動memcache (3)下載php_memcache.dll 到php安裝目錄擴展目錄 php\ext (4)修改php.ini 加入 extension=php_memcache.dll 重啟apache.查看phpinfo.php 如果有memcache模塊 則 說明安裝成功 2、thinkphp 中memcache 的使用 (1)ThinkPHP/conf/convention.php 修改緩存類型 'DATA_CACHE_TYPE' => 'Memcache', // 數據緩存類型, 支持: File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator (2)thinkphp官方下載擴展ThinkPHP_Extend_3.1.2/Extend/Driver/Cache/CacheMemcache.class.php 保存到 ThinkPHP/Lib/Driver/Cache/CacheMemcache.class.php (3)測試: S('test','memcache');$test = S('test'); echo $test; 輸出memcache 測試成功。 此為轉載,不是我原創,

㈤ 使用php Memcache模塊如何正確遍歷所有KEY以及VALUE

在php提供的用於與memcached交互的擴展模塊中有memcached與memcache,前者提供方法getAllKeys用於遍歷所有Memcached伺服器上的key,但是並不保證原子操作,而後者卻沒有提供任何方法,雖然在PHP官方
文檔中有人給出使用方法getExtendedStats來間接獲取Memcached伺服器上的所有key,但是給出的代碼是有不少坑的,如果拿來就用,對於cluster的memcached伺服器而言,有些問題就需要指出來。
下面將給出官方文檔中的代碼,並指出可能面臨的問題,代碼如下:
<?php
/**
*Functiontogetallmemcachekeys
*@authorManishPatel
*@Created:28-May-2010
*/
functiongetMemcacheKeys(){

$memcache=newMemcache;
$memcache->connect('127.0.0.1',11211)ordie("");

$list=array();
$allSlabs=$memcache->getExtendedStats('slabs');
$items=$memcache->getExtendedStats('items');
foreach($allSlabsas$server=>$slabs){
foreach($slabsAS$slabId=>$slabMeta){
$cmp=$memcache->getExtendedStats('cachemp',(int)$slabId);
foreach($cmpAS$keys=>$arrVal){
foreach($arrValAS$k=>$v){
echo$k."<br>";
}
}
}
}//EOgetMemcacheKeys()?>
在上述代碼中,如果用於獲取單個memcached伺服器上的key,是不存在任何問題,但是獲取連接池中的多個memcached所有key就存在問題,會發現列印出重復的key,問題就在於當使用getExtendedStats用去特定$slabID
上的信息時,返回的是連接池中所有的伺服器上的特定$slabId的存儲的keys信息。當$server為"127.0.0.1:11214"且$slabId為0將變數$cmp的信息列印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}
當$server為"127.0.0.1:11216"且$slabId為0將變數$cmp的信息列印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}

熱點內容
蝸牛游戲安卓手機怎麼更換賬號 發布:2025-03-17 13:41:49 瀏覽:322
為什麼人買一個蘋果一個安卓 發布:2025-03-17 13:36:59 瀏覽:439
三星手機簡訊在那個文件夾 發布:2025-03-17 13:31:51 瀏覽:194
安卓皇帝隱藏劇情在哪裡 發布:2025-03-17 13:18:53 瀏覽:507
新版安卓為什麼不兼容 發布:2025-03-17 13:18:49 瀏覽:483
s3哪個配置性價比高 發布:2025-03-17 13:06:09 瀏覽:320
氣體壓縮能量 發布:2025-03-17 13:00:16 瀏覽:78
壓縮油19 發布:2025-03-17 12:25:29 瀏覽:858
linux上網代理 發布:2025-03-17 12:23:56 瀏覽:361
c是高級語言嗎 發布:2025-03-17 12:16:31 瀏覽:525