2018年3月21日 星期三

PHP 使用 Redis 儲存 Session

將 Session 儲存在 Redis、memcached 之類的快取,可以增加效能
也方便不同的應用程式共享 Session
其中 Redis 可以設密碼、memcached 不行
所以若須開放其他 Server 存取(監聽非 127.0.0.1 的 IP),Redis 可設定密碼增加安全性。
以下設定 PHP 使用 Resid 儲存 Session

安裝 php-pecl-redis:
yum install php-pecl-redis

修改 PHP 設定檔:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=密碼"
其中 session.save_path 的格式為
session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2&read_timeout=2.5"
可設定的參數有:weight、timeout、persistent、prefix(預設"PHPREDIS_SESSION:")、auth、database...


查看儲存在 Redis 的 PHP Session:
key 的格式預設為「PHPREDIS_SESSION:seesion id」
127.0.0.1:6379> keys PHP*
1) "PHPREDIS_SESSION:n47g4vh1qt2pltplkd3lhifes2"

查看 session 在 Redis 中剩多久失效:
若 PHP 的 session.gc_maxlifetime 設定為1440,則結果應該會得到一個小於等於 1440 的秒數
127.0.0.1:6379> ttl PHPREDIS_SESSION:n47g4vh1qt2pltplkd3lhifes2
(integer) 1433

在 PHP 執行 session_destroy() 後,Redis 中的 session 也會消失:
127.0.0.1:6379> ttl PHPREDIS_SESSION:n47g4vh1qt2pltplkd3lhifes2
(integer) -2
#-1表示沒設定過期時間
#-2表示key不存在


參考:
https://github.com/phpredis/phpredis#php-session-handler
PECL :: Package :: redi
https://github.com/phpredis/phpredis/#readme(說明文件)


沒有留言:

張貼留言