導航:首頁 > 編程語言 > phpmemcached實例

phpmemcached實例

發布時間:2023-02-11 17:13:48

linux下安裝Memcached伺服器和客戶端與php使用示例

本文實例講述了Linux下安裝Memcached伺服器和客戶端與php使用。分享給大家供大家參考,具體如下:
Memcached是高性能的分布式內存緩存伺服器,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度和可擴展性。
系統環境:CentOS
7.2
64位
Apache2.4.33
安裝libevent依賴庫
wget
https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz
tar
-zxvf
libevent-2.0.15-stable.tar.gz
cd
libevent-2.0.15-stable
./configure
--prefix=/usr/local
make
sudo
make
install
安裝Memcached伺服器
wget
http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz
tar
-zxvf
memcached-1.4.9.tar.gz
cd
memcached-1.4.9
./configure
--prefix=/usr/local/memcached
make
sudo
make
install
啟動Memcache伺服器:
/usr/local/memcached/bin/memcached
-d
-m
128
-u
root
-p
11211
安裝Memcached客戶端
wget
http://pecl.php.net/get/memcache-2.2.5.tgz
tar
-zxvf
memcache-2.2.5.tgz
cd
memcache-2.2.5
./configure
--enable-memcache
--with-php-config=/usr/bin/php-config
--with-zlib-dir
make
sudo
make
install
【make報錯:
***
[memcache.lo]
Error
1】解決方法:
進入memcache安裝目錄,找到mamcache.c文件,將所有的zend_list_insert加上TSRMLS_CC,形如:zend_list_insert(pool,
le_memcache_pool
TSRMLS_CC);
客戶端安裝好之後,我們發現PHP擴展庫中多了一個memcache.so
在PHP配置文件php.ini中加入該擴展:
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/memcache.so
重啟伺服器,通過輸出phpinfo()查看該擴展相關信息
下面寫一個簡單的例子,實現memcache擴展與Memcached伺服器的交互
<?php
$mc
=
new
Memcache();
//創建Memcache對象
$mc->connect("127.0.0.1",
11211);
//連接Memcached伺服器
$mc->set('test','hello
world',0,10);
//存儲數據
echo
$mc->get('test');
//獲取數據
$mc->delete('test');
//刪除數據
$mc->flush();
//強制刷新全部緩存,即清空Memcached伺服器
$mc->close();
//斷開與Memcached伺服器的連接
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php緩存技術總結》、《PHP數組(Array)操作技巧大全》、《php字元串(string)用法總結》、《PHP錯誤與異常處理方法總結》、《php面向對象程序設計入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:linux下安裝php的memcached客戶端CentOS
5.4下的Memcache安裝步驟(Linux+Nginx+PHP+Memcached)linux下安裝memcached_動力節點Java學院整理Linux
下安裝
memcached

memcacheq的方法在Linux伺服器上安裝
memcached的基本操作linux下編譯安裝memcached服務php模塊memcache和memcached區別分析php擴展memcached和memcache的安裝配置方法PHP
使用memcached簡單示例分享PHP
MemCached高級緩存配置圖文教程PHP
MemCached
高級緩存應用代碼

⑵ windows下 php memcached 設置最大內存

工具:
memcached-1.2.6-win32-bin.zip MemCached服務端程序(for win)
Memcached Manager win下的MemCached管理工具
安裝配置MemCached服務端
下載memcached-1.2.6-win32-bin.zip ,解壓後得到memcached.exe,就是memcached的主程序了。比如我們放到MemCached伺服器下的C:\Program Files\MemCacheD下
下載安裝Memcached Manager ,通過這個來管理memcached的服務端。
打開MemCacheD Manager,點擊 add Server,填寫伺服器信息。我這里直接在本地安裝了memcached。如圖,填完後點擊apply,成功的話右側會出現伺服器。
點擊Add Instance添加memcached實例。這里有一些配置信息。Ip,埠,內存等等,不解釋了。點擊apply後會提示你是否現在啟動,我們這里選是
成功後發現右側已經有實例了,到此服務端配置完畢。
二、php安裝Memcached模塊支持
1、下載php_memcache.dll模塊,
你可以從http://downloads.php.net/pierre/找到對應的版本,
php5.3對應php_memcache-2.2.6-5.3-vc9-x86.zip
將php_memcache.dll放到php\ext目錄下,
2、修改php.ini來加入擴展,並並重啟apache伺服器
在php.ini加入一行引用擴展,代碼如下:
extension=php_memcache.dll
接著在 php.ini 文件里加上:
[Memcache]
memcache.allow_failover = 1
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
最好就放在剛才寫 "extension=php_memcache.dll" 的下面。(這是默認的一些配置),重啟apache伺服器,
然後查看一下phpinfo,如果有memcache,那麼就說明安裝成功!
測試windows下的Memcached
測試代碼如下:
復制代碼
<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'Hello Memcached!', 0, 60);
$val = $mem->get('key');
echo $val;
?>
復制代碼

⑶ php memcached怎麼用

memcached是一種緩存技術, 基於c/s模式,他可以把你的數據放入內存,從而通過內存訪問提速,因為內存最快的, memcached技術的主要目的提速,
在memachec 中維護了一張大的hashtable表 ,該表是在內存,表的結構是
key value
字串 (字串,數值,數組,對象,布爾,二進制數據,null)

u 安裝並使用memcached
安裝步驟
(1) 下載memcached軟體
(2) 安裝
進入cmd ,切換到 memcached.exe 文件所在目錄
memcached.exe –d install
(3) 啟動memcached
第一種,可以到服務點擊啟動
第二種, 命令
memcached.exe –m 200MB –d start 【以deamon方式啟動,默認64M】

如果你在啟動時,win7啟動不成功, 則可以使用如下方法
memcached.exe –p 埠號
轉載,僅供參考。

⑷ php 使用memcached 怎麼做登錄

原本就不應該用memcached來保存登錄狀態,如果非要用memcached做點跟登錄有關的事,那就用它來保存以下用戶信息就行了。
登錄信息保存在session或者cookie里,session會更安全,cookie可以長期保存。每次操作都用session或cookie里的登錄信息與資料庫里或memcached里的用戶信息做驗證。
memcached其實是一個內存管理工具,它並非PHP的一部分,只是正好PHP可以使用它。

⑸ PHP中的Memcache和memcached的區別 Memcache的操作方法

Memcached和Memcache是Memcached伺服器的擴展


⑹ 如何實現php+session+memcached高可用集群

在這個互聯網高度發達的時代,許多應用的用戶動輒成百上千萬,甚至上億。為了支持海量用戶的訪問,應用伺服器集群這種水平擴展的方式是最常用的。這種情形下,就會涉及到許多單機環境下完全不需要考慮的問題,這其中session的創建、共享和存儲是最常見之一。
在單機環境中,Session的創建和存儲都是由同一個應用伺服器實例來完成,而存儲也僅是內存中,最多會在正常的停止伺服器的時候,把當前活動的Session鈍化到本地,再次啟動時重新載入。
而多個實例之間,Session數據是完全隔離的。而為了實現Session的高可用,多實例間數據共享是必然的,下面我們以Redis 的SessionManager實現多Tomcat實例Session共享的配置為例,我們來梳理下一般session共享的流程:
添加具體要使用的manager的Jar文件及其依賴
redis session manager依賴jedis, commons-pool, commons-pool2
對應版本的redis session manager的jar文件
在TOMCAT_HOME/conf/context.xml中增加如下配置
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379" database="0"
maxInactiveInterval="30" />
其中host和port等替換為對應的配置信息
啟動多個Tomcat實例,以自帶的examples應用為例進行驗證
訪問examples應用的servlets/servlet/SessionExample,
在頁面中添加數據到session中,並查看頁面上對應的session信息
訪問另一個實例上相同應用的頁面,查看session信息,兩者應該是一致的
使用redis-cli查看redis中存儲的對應數據,相應的sessionId對應的數據已經保存了下來
以上是一個基本的配置過程,而在這些配置與驗證的步驟中,第二步是核心邏輯實現。 前面的文章,曾介紹過Tomcat的Valve,在請求處理時,Pipeline中的各個Valve的invoke方法會依次執行。Tomcat的AccessLogValve介紹
此處的session處理,就是以一個自定義Valve的形式進行的。關於Session的文章,前面也寫過幾篇,會附在結尾處。
以下是RedisSessionhandlerValve的invoke方法,我們看,主要是在Valve執行後進行Session的存儲或移除。
public void invoke(Request request, Response response) {
try {
getNext().invoke(request, response);
} finally {
final Session session = request.getSessionInternal(false);
storeOrRemoveSession(session);
manager.afterRequest();
}
}
而session的保存和移除又是通過manager執行的。 manager.save(session); manager.remove(session);
這里,manager就是前面定義的RedisSessionManager。默認單實例情況下,我們使用的都是StandardManager,對比一下兩者,標準的Manager對於session的創建和刪除,都會調到其父類ManagerBase中相應的方法,
public void add(Session session) {
sessions.put(session.getIdInternal(), session);
int size = getActiveSessions();
if( size > maxActive ) {
synchronized(maxActiveUpdateLock) {
if( size > maxActive ) {
maxActive = size;
}
}
}
}
public void remove(Session session, boolean update) {
if (session.getIdInternal() != null) {
sessions.remove(session.getIdInternal());
}
}
我們來看,由於其只保存在內存的Map中protected Map<String, Session> sessions = new
ConcurrentHashMap<>(),每個Tomcat實例都對於不同的map,多個實例間無法共享數據。
對應到RedisSessionManager對於session的處理,都是直接操作redis,基本代碼是下面這個樣:
public void save(Session session) throws IOException {
Jedis jedis = null;
Boolean error = true;
try {
RedisSession redisSession = (RedisSession) session;
Boolean sessionIsDirty = redisSession.isDirty();
redisSession.resetDirtyTracking();
byte[] binaryId = redisSession.getId().getBytes();
jedis = acquireConnection();
if (sessionIsDirty || currentSessionIsPersisted.get() != true) {
jedis.set(binaryId, serializer.serializeFrom(redisSession));
}
currentSessionIsPersisted.set(true);
jedis.expire(binaryId, getMaxInactiveInterval());
} }
移除時的操作是這樣的
public void remove(Session session, boolean update) {
Jedis jedis = null;
Boolean error = true;
log.trace("Removing session ID : " + session.getId());
try {
jedis = acquireConnection();
jedis.del(session.getId());
error = false;
} finally {
if (jedis != null) {
returnConnection(jedis, error);
}
}
}
而此時,多個Tomcat實例都讀取相同的Redis,session數據是共享的,其它實例的初始請求過來時,由於會執行findSession的操作,此時會從Redis中載入session,
public Session findSession(String id) throws IOException {
RedisSession session;
if (id == null) {
session = null;
currentSessionIsPersisted.set(false);
} else if (id.equals(currentSessionId.get())) {
session = currentSession.get();
} else {
session = loadSessionFromRedis(id); // 看這里,會從redis中load
if (session != null) {
currentSessionIsPersisted.set(true);
}
}
currentSession.set(session);
currentSessionId.set(id);
return session;
}
從而可以保證在一個實例被切換後,另外的實例可以繼續響應同一個session的請求。
以上即為Redis實現session共享高可用的一些關鍵內容。有興趣的朋友可以看下通過Memcached實現高可用,也是這個原理。順著這個思路,如果你有將Session存儲在其它地方的需求時,完全可以寫一個出來,自己動手,豐衣足食。
總結一下,我們是通過自定義的Valve來實現請求後session的攔截,同時,使用自定義的SessionManager,來滿足不同的session創建與存儲的需求。而至於是存儲在Redis/Memcached中,還是存儲在DB中,只是位置的區別。原理,是一致的。

閱讀全文

與phpmemcached實例相關的資料

熱點內容
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:922
現在最流行的單片機 瀏覽:88
機頂盒刷機源碼 瀏覽:985
編碼pdf下載 瀏覽:944
隔壁同學app怎麼 瀏覽:299
c語言宏命令 瀏覽:542
php卡死源碼 瀏覽:574
time庫中的clock函數python 瀏覽:989
cad視覺移動命令怎麼打開 瀏覽:821
安卓java調用python 瀏覽:395
java標准時間 瀏覽:137
華為伺服器湖北渠道商雲主機 瀏覽:30
韓式面部護理解壓視頻 瀏覽:301
pdf換成jpg圖片 瀏覽:897
dh加密演算法 瀏覽:107
安卓手機如何隱藏微信信息提示 瀏覽:632
nodejs解壓縮 瀏覽:262
直流雙轉子壓縮機 瀏覽:952
pythonxmlstring 瀏覽:822