亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

基于php使用memcache存儲session的詳解

2020-03-22 17:41:04
字體:
來源:轉載
供稿:網友
web服務器的php session都給memcached ,這樣你不管分發器把 ip連接分給哪個web服務器都不會有問題了,配置方法很簡單,就在php的配置文件內
增加一條語句就可以了,不過前提你需要裝好memcache模塊1.設置session用memcache來存儲
方法I: 在 php.ini 中全局設置
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
方法II: 某個目錄下的 .htaccess :
php_html' target='_blank'>value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
方法III: 再或者在某個一個應用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
使用多個 memcached server 時用逗號","隔開,并且和 Memcache::addServer() 文檔中說明的一樣,可以帶額外的參數"persistent"、"weight"、"timeout"、"retry_interval" 等等,類似這樣的:"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。
如果安裝的PECL是memcached(使用libmemcache庫的那個),則配置應為
ini_set("session.save_handler", "memcached"); // 是memcached不是memcache
ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:2. 啟動 memcached:
memcached -d -l 127.0.0.1 -p 11212 -m 128
或 啟動Memcache的服務器端:
memcached -d -m 100 -u root -l 192.168.36.200 -p 11211 -c 256 -P /tmp/memcached.pid
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
引用
-d選項是啟動一個守護進程,
-m是分配給Memcache使用的內存數量,單位是MB,我這里是100MB,
-u是運行Memcache的用戶,我這里是root,
-l是監聽的服務器IP地址,如果有多個地址的話,我這里指定了服務器的IP地址192.168.36.200,
-p是設置Memcache監聽的端口,我這里設置了11211,最好是1024以上的端口,我們這里統一使用11211
-c選項是最大運行的并發連接數,默認是1024,我這里設置了256,按照你服務器的負載量來設定。
-P是設置保存Memcache的pid文件,我這里是保存在/tmp/memcached.pid,3. 在程序中使用 memcache 來作 session 存儲
用例子測試一下:
復制代碼 代碼如下:
?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}

$_SESSION['TEST3'] = time();

print $_SESSION['TEST'];
print " br br
print $_SESSION['TEST3'];
print " br br
print session_id();
?

4. 用 sessionid 去 memcached 里查詢一下:
復制代碼 代碼如下:
?php
$memcache = memcache_connect('localhost', 11211);
var_dump($memcache- get('19216821213c65cedec65b0883238c278eeb573e077'));
$memcache- set('aaaa', 'hello everyone');
var_dump($memcache- get('aaaa'));
?

會看到
string(37) "TEST|i:1177556731;TEST3|i:1177556881;"
這樣的輸出,證明 session 正常工作。
用 memcache 來存儲 session 在讀寫速度上會比 files 時快很多,而且在多個服務器需要共用 session 時會比較方便,將這些服務器都配置成使用同一組 memcached 服務器就可以,減少了額外的工作量。缺點是 session 數據都保存在 memory 中,持久化方面有所欠缺,但對 session 數據來說也不是很大的問題。
===================================
一般地, Session 是以文本文件形式存儲在服務器端的。如果使用 Seesion,或者該 PHP 文件要調用 Session 變量,那么就必須在調用 Session 之前啟動它,使用 session_start() 函數。其它都不需要你設置了,PHP 自動完成 Session 文件的創建。其默認 Session 的存放路徑是服務器的系統臨時文件夾。
但是如果碰到大數據量的Sesstion的時候, 使用基于文件的Session存取瓶頸可能都是在磁盤IO操作上,現在利用Memcached來保存Session數據,直接通過內存的方式,效率自然能夠提高不少。 在讀寫速度上會比 files 時快很多,而且在多個服務器需要共用 session 時會比較方便,將這些服務器都配置成使用同一組 memcached 服務器就可以,減少了額外的工作量。

其缺點是 session 數據都保存在 memory 中,一旦宕機,數據將會丟失。但對 session 數據來說并不是嚴重的問題。
如何用 memcached 來存儲 session呢?以下是基本的配置步驟:
1. 安裝 memcached
在 phpinfo 輸出中的 “Registered save handlers” 會有 “files user sqlite”。2. 修改配置文件,
a. 在 php.ini 中全局設置(* 需要重啟服務器)
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
b. 或者某個目錄下的 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
c. 也可以在某個一個應用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");
注:使用多個 memcached server 時用逗號”,”隔開,并且和 Memcache::addServer() 文檔中說明的一樣,可以帶額外的參數”persistent”、”weight”、”timeout”、”retry_interval” 等等,類似這樣的:”tcp://host:port?persistent=1&weight=2,tcp://host2 :port2″ 。3. 啟動 memcached
memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid4.測試 創建一個 session
復制代碼 代碼如下:
?php
//set_session.php
session_start();
if (!isset($_SESSION['admin'])) {
$_SESSION['TEST'] = 'wan';
}
print $_SESSION['admin'];
print "/n";
print session_id();
?

5. 用 sessionid 去 memcached 里查詢一下
復制代碼 代碼如下:
?php
//get_session.php
$mem = new Memcache;
$mem- connect("127.0.0.1", 11211);
var_dump($mem- get('0935216dbc0d721d629f89efb89affa 6'));
?

復制代碼 代碼如下:
[root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php

輸出結果:
string(16)
"admin|s:3:"wan";"
證明 session 正常工作。
===========================
用 memcache 來存儲 session 在讀寫速度上應該會比文件快很多,而且在多個服務器需要共用 session 時會比較方便,將這些服務器都配置成使用同一組 memcached 服務器就可以,減少了額外的工作量。缺點是 session 數據都保存在內存中,不能持久化存儲,如果想持久化存儲,可以考慮使用Memcachedb來存儲,或用Tokyo Tyrant+Tokyo Cabinet來進行存儲。

怎樣判斷session失效了呢?在php.ini中有個Session.cookie_lifetime的選項,這個代表SessionID在客戶端Cookie儲存的時間,默認值是“0”,代表瀏覽器一關閉,SessionID就作廢,這樣不管保存在Memcached中的Session是否還有效(保存在Memcached中的session會利用Memcached的內部機制進行處理,即使session數據沒有失效,而由于客戶端的SessionID已經失效,所以這個key基本上不會有機會使用了,利用Memcached的LRU原則,如果Memcached的內存不夠用了,新的數據就會取代過期以及最老的未被使用的數據),因為SessionID已經失效了,所以在客戶端會重新生成一個新的SessionID。

保存在Memcached中的數據最長不會超過30天,這個時間是以操作Memcached的時間為基準的,也就是說,只要key還是原來的key,如果你重新對此key進行了相關的操作(如set操作),且重新設置了有效期,則此時此key對應的數據的有效期會重新計算的,php手冊中有說明

Expiration time of the item. If it's equal to zero, the item will never expire. You can also use Unix timestamp or a number of seconds starting from current time, but in the latter case the number of seconds may not exceed 2592000 (30 days).

Memcached主要的cache機制是LRU(最近最少用)算法+超時失效。當您存數據到memcached中,可以指定該數據在緩存中可以呆多久。如果memcached的內存不夠用了,過期的slabs會優先被替換,接著就輪到最老的未被使用的slabs。
===========================
為了使web應用能使用saas模式的大規模訪問,必須實現應用的集群部署.要實現集群部署主要需要實現session共享機制,使得多臺應用服務器之間會話統一, tomcat等多數服務都采用了session復制技術實現session的共享.
session復制技術的問題:
(1)技術復雜,必須在同一種中間件之間完成(如:tomcat-tomcat之間).
(2)在節點持續增多的情況下,session復制帶來的性能損失會快速增加.特別是當session中保存了較大的對象,而且對象變化較快時,性能下降更加顯著.這種特性使得web應用的水平擴展受到了限制.

session共享的另一種思路就是把session集中起來管理,首先想到的是采用數據庫來集中存儲session,但數據庫是文件存儲相對內存慢了一個數量級,同時這勢必加大數據庫系統的負擔.所以需要一種既速度快又能遠程集中存儲的服務,所以就想到了memcached.memcached能緩存什么?
通過在內存里維護一個統一的巨大的hash表,Memcached能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。memcached快么?
非???。memcached使用了libevent(如果可以的話,在linux下使用epoll)來均衡任何數量的打開鏈接,使用非阻塞的網絡I/O,對內部對象實現引用計數(因此,針對多樣的客戶端,對象可以處在多樣的狀態), 使用自己的頁塊分配器和哈希表, 因此虛擬內存不會產生碎片并且虛擬內存分配的時間復雜度可以保證為O(1).。
使用過程注意幾個問題和改進思路:
1、memcache的內存應該足夠大,這樣不會出現用戶session從Cache中被清除的問題(可以關閉memcached的對象退出機制)。
2、如果session的讀取比寫入要多很多,可以在memcache前再加一個Oscache等本地緩存,減少對memcache的讀操作,從而減小網絡開銷,提高性能。
3、如果用戶非常多,可以使用memcached組,通過set方法中帶hashCode,插入到某個memcached服務器
對于session的清除有幾種方案:
(1)可以在凌晨人最少的時候,對memcached做一次清空。(簡單)
(2)保存在緩存中的對象設置一個失效時間,通過過濾器獲取sessionId的值,定期刷新memcached中的對象.長時間沒有被刷新的對象自動被清除.(相對復雜,消耗資源)
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区欧美久久| 亚洲欧美另类国产| 欧美激情久久久久久| 亚洲久久久久久久久久| 欧美大尺度电影在线观看| 国产精品电影网| 国产亚洲精品成人av久久ww| 欧美精品免费在线| 国产噜噜噜噜噜久久久久久久久| 日韩精品中文字幕在线| 日韩亚洲综合在线| 国产一区二区av| 欧美裸身视频免费观看| 亚洲精品久久久久中文字幕欢迎你| 日本中文字幕久久看| 91成人在线播放| 欧美在线亚洲在线| 欧美精品videos性欧美| 色av中文字幕一区| 国产日本欧美一区二区三区| 亚洲精品自拍偷拍| 中文亚洲视频在线| 国产精品男女猛烈高潮激情| www.色综合| 欧美在线国产精品| 成人免费视频在线观看超级碰| 亚洲精品suv精品一区二区| 美乳少妇欧美精品| 亚洲精品乱码久久久久久按摩观| 亚洲日本欧美日韩高观看| 奇门遁甲1982国语版免费观看高清| 亚洲成人激情在线观看| 亚洲成人动漫在线播放| 精品二区三区线观看| 久久综合伊人77777蜜臀| 在线观看亚洲区| 一二美女精品欧洲| 欧美一区二区三区四区在线| 欧美黄网免费在线观看| 久久精品国产亚洲精品| 国产精品情侣自拍| 68精品国产免费久久久久久婷婷| 青草青草久热精品视频在线观看| 欧美一级视频免费在线观看| 亚洲**2019国产| 综合国产在线观看| 亚洲欧美国产一区二区三区| 国产91精品久久久久久| 日韩av电影手机在线| 三级精品视频久久久久| 国产女人18毛片水18精品| 久久久免费精品视频| 欧美国产日韩xxxxx| 日韩免费视频在线观看| 中文字幕精品久久| 欧美日韩国产综合新一区| 91麻豆桃色免费看| 亚洲高清福利视频| 亚洲精品视频久久| 97成人超碰免| 最新日韩中文字幕| 97视频在线观看网址| 日韩经典中文字幕在线观看| 欧美电影免费看| 色阁综合伊人av| 日韩成人小视频| 久久色免费在线视频| 久久精品国产69国产精品亚洲| 亚洲欧美日韩久久久久久| 日本久久亚洲电影| 亚洲国产高清福利视频| 2019中文字幕在线观看| 亚洲第一区第一页| 久久精品这里热有精品| 欧美日韩国产色| 性欧美激情精品| 日韩亚洲在线观看| 亚洲国产精品字幕| 欧美黄色片免费观看| 最新69国产成人精品视频免费| 不卡av电影在线观看| 国产成人高清激情视频在线观看| 久久国产天堂福利天堂| 国产精品久久久久久久久久免费| 国产精品久久久久久久久久久久久| 欧美日韩亚洲高清| 欧美乱人伦中文字幕在线| 91精品视频在线| 狠狠操狠狠色综合网| 欧美中文在线免费| 色悠悠久久88| 日韩亚洲成人av在线| 国产91色在线|| 国产精品极品美女粉嫩高清在线| 国产精品一区二区久久久| 亚洲中国色老太| 亚洲精品自产拍| 亚洲天堂2020| 久久国产精品久久久久| 亚洲欧美中文日韩在线v日本| 欧美理论电影网| 在线观看日韩专区| 伊是香蕉大人久久| 91精品国产亚洲| 国产视频福利一区| 国产精品白丝jk喷水视频一区| 久久精品亚洲国产| 成人观看高清在线观看免费| 国产成人精品一区二区在线| 欧美精品一区三区| 色老头一区二区三区| 91精品久久久久久| 97涩涩爰在线观看亚洲| 国产精品一区二区3区| 亚洲精品国产综合久久| 国产91在线播放| 中文字幕一区二区三区电影| 亚洲аv电影天堂网| 91精品国产91久久久久久最新| 欧美精品videos| 96国产粉嫩美女| 蜜臀久久99精品久久久无需会员| 亚洲一二在线观看| 国产精品久久久久免费a∨大胸| 久久精品中文字幕免费mv| 欧美成年人视频| 久久综合伊人77777尤物| 国产精品久久久久影院日本| 久久国产精品久久久| 日韩成人在线网站| 日韩精品日韩在线观看| 国产精品成人久久久久| 91美女片黄在线观看游戏| 精品亚洲男同gayvideo网站| 久久久在线免费观看| 成人高清视频观看www| 午夜剧场成人观在线视频免费观看| 久久久999国产精品| 91成品人片a无限观看| 日韩精品极品视频| 亚洲毛片在线看| 国产精品美女在线观看| 欧美在线一区二区视频| 久久久久久一区二区三区| 欧美亚洲视频一区二区| 国产精品天天狠天天看| 日韩欧美在线播放| 97精品视频在线| 精品一区二区亚洲| 国产在线精品一区免费香蕉| 美女视频久久黄| 91麻豆桃色免费看| 日韩最新中文字幕电影免费看| 日韩av成人在线| 97国产精品视频人人做人人爱| 亚洲第一福利网| 日本国产高清不卡| 精品亚洲一区二区| 456亚洲影院| 7m精品福利视频导航| 国内成人精品视频| 欧美壮男野外gaytube| 亚洲欧美激情一区| 国内精品久久影院|