Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法,11.04memcache
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法,11.04memcache
本文实例讲述了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 (略过,不清楚的筒子可以查看前面一篇文章:http://www.bkjia.com/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平台上的php程序设计有所帮助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
