A. php操作memcacheq
$arr=array(1,2,3,4,5);
$q->set("queque_1",$arr);
這樣,你取的時候就會是一個數組了
B. thinkphp裡面怎樣配置memcache
THINKPHP 自帶memcache 擴展拍稿。
這個是配置信息,寫到config裡面去就基賀慎行了。
$options = array (
'host' => C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',
'port' => C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,
'timeout' => C('搏敬DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,
'persistent' => false,
'expire' =>C('DATA_CACHE_TIME'),
'length' =>0,
);
C. php 中的 memcache 是什麼 怎麼用的 越詳細越好,求大神 在線等
memcache 是一種緩存伺服器軟體,安裝了該軟體的電腦,即可稱為 緩存伺服器。
memcache 緩存伺服器是用來緩解 關系型資料庫(例如 Mysql)負載壓力的,第一次訪問 mysql資料庫(select)後,得到的數據放到緩存伺服器里,設定個生命周期(例如7天),然後7天內所有訪問該數據的語句就不用再到數據里查詢了,直接從緩存伺服器里取。
而你所問的 php中的 memcache 是一種客戶端,客戶端是用來訪問服務端的(例如用IE瀏覽器訪問網站,IE瀏覽器就是客戶端)。再說具體點,php中的 memcache 就是一種擴展,在php安裝目錄的 php.ini 配置文件里開啟 memcache 擴展後,你就能 用 memcache類實例對象,用memcache對象的各種方法來訪問 memcache伺服器。
例:
<?php
$mem = new Memcache();//實例化一個對象
//$mem->connect("ip地址",埠號);//連接memcache伺服器
$mem->connect("localhost",11211);//連接memcache伺服器
//添加數據,如果鍵名已經存在,則添加失敗
$res = $mem->add('name','xiaoqian',MEMCACHE_COMPRESSED,3600);
var_mp($res);
//獲取數據
$str = $mem->get('name');
var_mp($str);
?>
詳細的怎麼開啟擴展後續什麼的,你在這個我上傳的word文檔里看看就行了
D. php怎麼開啟memcache
下載memcache安裝包和php擴展文件php_memcache.dll。解壓memcache,把memcached移動到C盤。
單擊開始菜單,運行「cmd」。
cd .. //進入c盤
cd memcached //進入memcache目錄
memcache.exe -d install //安裝memcache服務
設置php:找到php安裝目錄,打開php.ini文件。找到配置文件里允許支持擴展的區域exetension=。。,添加一行exetension=php_memcache.dll。
把php擴展文件php_memcache.dll移動到php安裝目錄下的ext目錄下。注意在php.ini中要設置好exetension目錄。php_memcache.dll此文件需要先在網上下載下來!
設置apache:
打開apache配置文件httpd.conf,找到LoadMole載入模塊區域。去掉前面的「LoadMole mem_cache_mole moles/mod_mem_cache.so」#號
重啟apache服務。linux下重啟使用命令:service httpd restart。
然後就大功告成!
E. 使用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"}
}
}
F. memcache緩存數組的問題
不需讀取就直接添加,只有m->append方法
$a=array(1,2,3,4);
如果一些文本序列化格式滲世寫入,就不能添加。
必須自己設計數據結構,以定長的連螞運續數列結構最好,如果整數范圍不大在6.55萬以內
建議用16bit無符號整型存儲,格式為
[2個位元組][2個位元組][2個位元組][2個位元組][2個位元組][2個位元組]..
$a=array(1,2,3,4);
$data=pack('n*',$a);
$memc->add('mya', $data); //第一次新填入
$data=pack('n',5); //准叢物肢備新增數據
$memc->append('mya', $data); //添加在後面
....
$data=$memc->get('mya'); //讀取
$a=unpack('n*',$data); //數組還原1,2,3,4,5
G. PHP中的Memcache和memcached的區別 Memcache的操作方法
Memcached和Memcache是Memcached伺服器的擴展
其實很簡單,memcache是php的一個擴展,用於php管理memcached(服務端),php-memcache.dll。
如果安裝了memcached(服務端)不安裝擴展,那麼php無法操控memcached,但是命令行使用起來沒有問題
如果安裝了PHP memcache客戶端(php memcache和php memcached)。但是沒有安裝memcached(服務端)服務,那麼這個就無法使用
只有同時安裝了memcached(服務端)和PHP memcache客戶端擴展才可以提高動態網站性能
H. thinkphp怎麼清除memcache所有數據
我在後盾人看的相關問題加上我自己的理解你試試吧首先有個表單:比如是<form name="form1" method="post" action="__URL__/submit">意思是提交到當前模塊的submit操作中。然後表單中有你所需要的復選框<input name="id[]" type="checkbox" id="id[]" value="{$vo.id}" class="checkbox">(若干個。。) </form>
點擊提交按紐後,
在模塊中 public function submit{
$getid=$_REQUEST['id'];//獲取選擇的復選框的值
if (!$getid) $this->error('未選擇記錄') ;//沒選擇就提示信息
$getids=implode(',',$getid); //選擇一個以上,就用,把值連接起來(1,2,3)這樣
$id = is_array($getid)?$getids:$getid;//如果是數組,就把用,連接起來的值覆給$id,否則就覆獲取到的沒有,號連接起來的值
//最後進行數據操作,例如你的是ArticleModel
$Result=D("Article")->execute('DELETE FROM __TABLE__ where `id` IN ('.$id.')');
$say='刪除成功';
if($Result===false){
$this->error('操作失敗');
}else{
$this->assign('jumpUrl',__URL__);
$this->success($say);
}
}希望對你有用😊
I. PHP應用中常用的9大緩存技術
一、全頁面靜態化緩存
也就是將頁面全部生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php伺服器解析的流程。此種方式,在CMS系統中比較常見,比如dedecms;
一種比較常用的實現方式是用輸出緩存:
Ob_start()******要運行的代碼*******$content=Ob_get_contents();****將緩存內容寫入html文件*****Ob_end_clean();
二、數據緩存
顧名思義,就是緩存數據的一種方式;比如,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息等數據,此時就可以將這些數據緩存到一個php文件中,文件名包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調這個文件裡面的信息,而不用再去資料庫查詢;其實緩存文件中緩存的就是一個php數組之類;
Ecmall商城系統裡面就用了這種方式;
三、查詢緩存
其實這跟數據緩存是一個思路,就是根據查詢語句來緩存;將查詢得到的數據緩存在一個文件中,下次遇到相同的查詢時,就直接先從這個文件裡面調數據,不會再去查資料庫;但此處的緩存文件名可能就需要以查詢語句為基點來建立唯一標示;
按時間變更進行緩存
就是對於緩存文件您需要設一個有效時間,在這個有效時間內,相同的訪問才會先取緩存文件的內容,但是超過設定的緩存時間,就需要重新從資料庫中獲取數據,並生產最新的緩存文件;比如,我將我們商城的首頁就是設置2個小時更新一次。
四、頁面部分緩存
該種方式,是將一個頁面中不經常變的部分進行靜態緩存,而經常變化的塊不緩存,最後組裝在一起顯示;可以使用類似於ob_get_contents的方式實現,也可以利用類似ESI之類的頁面片段緩存策略,使其用來做動態頁面中相對靜態的片段部分的緩存。
該種方式可以用於如商城中的商品頁;
五、Opcode緩存
首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,返回結果;所以,對於相同的php文件,第一次運行時可以緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。
比較知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按內容變更進行緩存
這個也並非獨立的緩存技術,需結合著用;就是當資料庫內容被修改時,即刻更新緩存文件;
比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩存;
當商家在後台修改這個商品的信息時,點擊保存,我們同時就更新緩存文件;那麼,買家訪問這個商品信息時,實際問的是一個靜態頁面,而不需要再去訪問資料庫;
試想,如果對商品頁不緩存,那麼每次訪問一個商品就要去資料庫查一次,如果有10萬人在線瀏覽商品,那伺服器壓力就大了;
七、內存式緩存
提到這個,可能大家想到的首先就是Memcached;memcached是高性能的分布式內存緩存伺服器。一般的使用目的是,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
它就是將需要緩存的信息,緩存到系統內存中,需要獲取信息時,直接到內存中取;比較常用的方式就是key_>value方式;
connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','緩存的內容');$get=$memcache->get($key);//獲取信息?>
八、apache緩存模塊
apache安裝完以後,是不允許被cache的。雲南IT培訓http://www.kmbdqn.cn/認為如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf里進行設置,當然前提是在安裝apache的時候要激活mod_cache的模塊。
J. PHP Memcache緩存數據問題
$mem = new Memcache;
$mem -> connect('localhost', 11211);
$key="mysum";
$sum = $mem->get($key);
if(empty($sum)) {
include_once("connect.php");
$stmt = $pdo -> prepare("select * from pic8 where toid=? order by ptime ");
$stmt -> setFetchMode(PDO::FETCH_ASSOC);
$stmt -> execute(array(5));
while($row=$stmt -> fetch()){
$a= " <li> "
. " <div class=\"title\"><a href=\" $pic_href\"> $pic_dm </a></div>"
. " <div class=\"img\"><a href=\" $pic_href\"><img src=\"/shop/$pic_url\" alt=\" $pic_dm \" /></a></div>"
. " </li> "
."";
$sum=$sum.$a;}
$mem -> add($key,$sum,MEMCACHE_COMPRESSED,10);
echo"這是第一次訪問從資料庫取數據放入內存中!<br>"; }
echo $sum;