91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • Ubuntu server 11.04安裝memcache及php使用memcache來存儲session的示例分析

Ubuntu server 11.04安裝memcache及php使用memcache來存儲session的示例分析

發布時間:2021-08-31 09:36:05 來源:億速云 閱讀:165 作者:小新 欄目:開發技術

這篇文章主要介紹Ubuntu server 11.04安裝memcache及php使用memcache來存儲session的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體如下:

1、首先安裝memcache服務端:

sudo apt-get install memcached

安裝完成后系統 自動啟動了 memcached服務占用11211端口

如需重新配置11211端口的服務 需要關閉已開啟的memcached服務

手動啟動:

memcached -d -m 128 -p 11211 -u memcache

這里需要說明一下memcached服務的啟動參數:

-p 監聽的端口
-l 連接的IP地址, 默認是本機
-d start 啟動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數,默認是1024
-f 塊大小增長因子,默認是1.25-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助

2、安裝PHP Memecache 客戶端

$ sudo apt-get install php5-memcache

重啟web服務器

測試memcache代碼:

<?php
$mem = new Memcache; //創建Memcache對象
$mem->connect("127.0.0.1", 11211); //連接Memcache服務器
$val = "這是一個Memcache的測試.";
$key = md5($val);
if(($k = $mem->get($key))){ //判斷是否獲取到指定的key
  echo 'from cache:'.$k;
} else {
  echo 'normal'; //這里我們在實際使用中就需要替換成查詢數據庫并創建緩存.
  $mem->set($key, $val, 0, 120); //增加插入一條緩存,緩存時間為120s
}

用memcache存儲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 (略過,不清楚的筒子可以查看前面一篇文章:https://www.jb51.net/article/85510.htm)
在 phpinfo 輸出中的 "Registered save handlers" 會有 "files user sqlite"。

2. 修改配置文件,

①. 在 php.ini 中全局設置(* 需要重啟服務器)

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

②. 或者某個目錄下的 .htaccess :

php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"

③. 也可以在某個一個應用中:

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.pid

4.測試 創建一個 session

<?php
//set_session.php
session_start();
if (!isset($_SESSION['admin'])) {
  $_SESSION['admin'] = '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('0935216dbc0d721d629f89efb89affa6'));
?>

復制代碼 代碼如下:

[root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php


輸出結果:

string(16) "admin|s:3:"wan";"

證明 session 正常工作。

再次深入 多域名網站利用MEMCACHE方式共享SESSION數據

通過了解 SESSION 的工作原理,我們可以發現,在默認情況下,各個服務器會各自分別對同一個客戶端產生 SESSION ID,如對于同一個用戶瀏覽器,A 服務器產生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而 B 服務器生成的則是 c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 數據都是分別保存在本服務器的文件系統中。

確定了問題所在之后,就可以著手進行解決了。想要共享 SESSION 數據,那就必須實現兩個目標:一個是各個服務器對同一個客戶端產生的 SESSION ID 必須相同,并且可通過同一個 COOKIE 進行傳遞,也就是說各個服務器必須可以讀取同一個名為 PHPSESSID 的 COOKIE;另一個是 SESSION 數據的存儲方式/位置必須保證各個服務器都能夠訪問到。簡單地說就是多服務器共享客戶端的 SESSION ID,同時還必須共享服務器端的 SESSION 數據。

第一個目標的實現其實很簡單,只需要對 COOKIE 的域(domain)進行特殊地設置即可,默認情況下,COOKIE 的域是當前服務器的域名/IP 地址,而域不同的話,各個服務器所設置的 COOKIE 是不能相互訪問的,如 www.aaa.com 的服務器是不能讀寫 www.bbb.com 服務器設置的 COOKIE 的。這里我們所說的同一網站的服務器有其特殊性,那就是他們同屬于同一個一級域,如:tieba.xiaoyuan.com 和 www.xiaoyuan.com 都屬于域 .xiaoyuan.com,那么我們就可以設置 COOKIE 的域為 .xiaoyuan.com,這樣 tieba.xiaoyuan.com、www.xiaoyuan.com 等等都可以訪問此 COOKIE。PHP 代碼中的設置方法如下:

<?php
ini_set('session.cookie_domain', 'xiaoyuan.com');
?>

這樣各個服務器共享同一客戶端 SESSION ID 的目的就達到了。

于是 可以在 a.domain.com 下

session.php

<?php
ini_set('session.cookie_domain', 'domain.com');
session_start();
if (!isset($_SESSION['admin'])) {
  $_SESSION['admin'] = 'wan';
}
print $_SESSION['admin'];
print "\n";
print session_id();

在b.domain.com下

session2.php

<?php
ini_set('session.cookie_domain', 'domain.com');
session_start();
echo $_SESSION['admin'];

以上是“Ubuntu server 11.04安裝memcache及php使用memcache來存儲session的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌乐县| 闵行区| 陇西县| 育儿| 苗栗市| 讷河市| 新平| 西城区| 平凉市| 宁乡县| 南阳市| 焦作市| 响水县| 满洲里市| 乌苏市| 易门县| 乌审旗| 临潭县| 东丰县| 海口市| 女性| 舒兰市| 平和县| 邵阳市| 孟州市| 永兴县| 咸丰县| 泗水县| 肥东县| 巴林右旗| 古蔺县| 龙川县| 响水县| 佳木斯市| 壶关县| 阿图什市| 冷水江市| 浙江省| 乌什县| 富宁县| 台州市|