亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

Redis保存PHP Session的方法

來源:藏色散人 發(fā)布時(shí)間:2019-01-10 10:46:53 閱讀量:973

PHP默認(rèn)就支持保存session到redis,不需任何額外代碼。

Redis保存session用的命令是setex,用redis-cli monitor實(shí)時(shí)監(jiān)測(cè)可以檢測(cè)到。

setex命令的語法:

1

setex(key, time, value)

其中,key是鍵值,time是過期時(shí)間,value是字符串類型的值。

具體步驟如下。

1、環(huán)境

要用Redis保存session,首先必須要滿足下面的條件:

必須有一臺(tái)安裝了Redis服務(wù)器。本例用本地服務(wù)器Redis,IP為:127.0.0.1,端口:6379。

PHP安裝了phpredis擴(kuò)展,通過phpinfo()能夠看到擴(kuò)展,如下圖。

phpredis.jpg

PHP能正常訪問Redis。測(cè)試代碼如下,

1

2

3

4

5

6

<?php

    $redis = new Redis();

    $redis->connect('127.0.0.1', 6379);

    $count = $redis->exists('count') ? $redis->get('count') : 1;

    echo $count;

    $redis->set('count', ++$count);

刷新頁面,如果看到數(shù)字不斷增加,說明Redis環(huán)境正常。

2、配置PHP

安裝了Redis擴(kuò)展后,phpinfo()輸出中會(huì)看到session的支持句柄,其中包含了redis,如下:

session_redis.png

有一點(diǎn)要注意的是,Redis的過期時(shí)間最大值為2147483647,也就是十六進(jìn)制的7fffffff。

所以,session配置中回收時(shí)間session.gc_maxlifetime的值不能超過這個(gè)數(shù)字。

否則Redis用setex命令保存session時(shí),過期時(shí)間time為負(fù)數(shù),相當(dāng)于直接刪除了這個(gè)key。

這樣不僅不會(huì)保存成功,PHP還會(huì)返回下面的錯(cuò)誤:

1

Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (127.0.0.1:6379) in Unknown on line 0

接著,修改php配置,總共有3種方法,如下選擇其中一種即可:

2.1 修改php.ini

打開 php.ini 文件,設(shè)置下面兩個(gè)值:

1

2

session.save_handler = redis

session.save_path = "tcp://127.0.0.1:6379"

如果Redis有密碼,用下面的配置:

1

session.save_path = "tcp://127.0.0.1:6379?auth=password"

配置完成后,重啟PHP-FPM。

2.2 修改php-fpm.conf

PHP-FPM的配置文件/etc/php-fpm.conf或者/etc/php-fpm.d/*.conf中,也有session的配置。

它們的session配置優(yōu)先級(jí)比php.ini高,會(huì)覆蓋php.ini中的配置。

所以,也直接在這里面改:

1

2

php_value[session.save_handler] = redis

php_value[session.save_path] = "tcp://127.0.0.1:6379"

如果用php.ini的配置,則需要把這兩行用;注釋掉。

然后重啟PHP-FPM

2.3 PHP代碼

也可以在運(yùn)行的PHP代碼中配置session,如下。

1

2

ini_set('session.save_handler', 'redis');

ini_set('session.save_path', 'tcp://127.0.0.1:6379');

3、測(cè)試

寫一段PHP測(cè)試代碼,如下:

1

2

3

4

session_start();

$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;

echo $count;

$_SESSION['count'] = ++$count;

如果刷新頁面看到數(shù)字不斷增加,說明配置Redis保存session成功。


標(biāo)簽: PHP
分享:
評(píng)論:
你還沒有登錄,請(qǐng)先