phpredissession
① php 怎麼把session寫入redis
一、 安裝phpredis擴展
php連接redis需要安裝phpredis擴展。
下載地址:https://github.com/phpredis/phpredis/releases,選用相應版本。
筆者用的是php5.6.29,下載了phpredis-3.0.0安裝出了問題,於是換成phpredis-2.2.8,正常。
# tar zxvf phpredis-2.2.8.tar.gz && cd phpredis-2.2.8
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
正常情況下會提示在下面目錄下生成redis.so文件
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
# sed -i '$aextension="redis.so"' /usr/local/php/etc/php.ini
# service httpd restart
驗證:
# php -i | grep redis | grep -xq redis && echo ok || echo "phpredis extended failure"
二、 配置php連接redis(筆者使用的阿里雲redis)
# sed -i 's/session.save_handler.*/session.save_handler = redis/' /usr/local/php/etc/php.ini
# sed -i '/session.save_handler/asession.save_path ="tcp://xxxx.rds.aliyuncs.com?auth=redis密碼"' /usr/local/php/etc/php.ini
# service httpd restart
② PHP提高SESSION響應速度的方法有哪些
1、設置多級目錄存儲SESSION
默認session的存儲目錄是1級目錄,如果用戶量比較大,session文件數量就比較大,我們可以設置目錄數為2,使用2級目錄可以提交查找和存取速度。不過這種方式對速度的提升一般不是很明顯,可以通過修改php.ini,進而修改session存儲目錄數。
session.save_path = "2;/tmp"2、將SESSION存儲到redis中
php中的session默認是存儲在文件中的,支持redis存儲方式,因為redis的鍵值數據時存儲在內存中的,可以提高session的存取速度。
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"3、及時釋放SESSION文件鎖
我們在使用session時,需要先執行session_start()函數。
session_start()函數的作用如下:
判斷http請求是否包含名為PHPSESSID的cookie,如果沒有則創建該cookie並寫入到http響應的頭文件。
通過PHPSESSID查找對應的session文件,以讀寫方式打開的文件,然後讀取裡面的數據到內存。
然後我們一般會通過$_SESSION這個超全局變數,讀取或者設置session的值,我們操作的時候,session的值都是保存在內存中的,默認在頁面執行完畢之後,才會寫入到對應的文件中。
我們通過下面的一段代碼測試這個過程:
SESSION執行過程分析:
include "session_function.php";
//session_function.php代碼在附錄
session_start();
$_SESSION['name']="koastal";
echo "<br/>html content<br/>";
var_mp($_SESSION);
echo "<br/>";輸出結果:
open
read
html content
array (size=1)
'name' => string 'koastal' (length=7)
shutdown
write
close通過上面的例子可以發現,在頁面執行的過程中(頁面的執行過程是指將php文件解析為對應的html文件的耗時,而不是用戶在該頁面上的停留時間),session文件是被鎖定的。
推薦教程:PHP視頻教程