1. 云栖社区>
  2. PHP教程>
  3. 正文

Using Redis to store php session

作者:用户 来源:互联网 时间:2017-12-01 17:13:46

Using Redis to store php session - 摘要: 本文讲的是Using Redis to store php session,Using Redis to store php session 默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景下,当台机器不仅处理能力跟不上,

Using Redis to store php session

默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景下,当台机器不仅处理能力跟不上,而且当机器故障时整个系统就处于不可用状态了。所以多机器负载均衡就非常有必要了。

但是问题来了,假设现在系统有两台应用服务器serverA,serverB,用户X现在已经登录了,而登录状态众所周知是存储在应用服务器的session中的,如果用户X的登录请求是serverA响应的,那么其登录状态是存储在serverA上的,当用户X的下一个请求被转发给serverB时,serverB是会认为用户X尚未登录,因为他没有存储用户X的session信息。

当然你可以将负载均衡设置为,将相同IP的访问请求均转发给同一个服务器,但是这种方案并不完美,可以设想这样一种情形,应用服务器serverA进程死掉了,那么在serverA上登录的所有用户就无法正常访问服务了。

所以只有能够在多台应用服务器之间共享存储session才能够解决这一问题,而现有的常见的解决方案就使用memcache,redis来存储session。

windows下配置php+redis 1. 安装redis服务器

下载地址 Redis.msi

如果下载的非安装版,则需要通过命令行来启动,redis服务,而且命令行窗口不可以关闭,否则服务会关闭

redis-server.exe redis.conf

如果选择的是msi安装版,安装后会在windows服务中看到redis服务,默认是自动启动的,命令行去到安装目录,运行redis-cli.exe可以通过命令行来操作redis的读写。

keys * //列出所有的键。get "phpredis_session:xxxxxxxxxxxxx" //获取指定键的值flushdb //清除所有的键值对。

redis.conf文件中可以配置redis-server的相关参数。

2. 安装php_redis扩展

2.1. 通过phpinfo()查看php编译脚本。

Using Redis to store php session

2.2. 下载与编译脚本一致的php_redis扩展

一定要一致,否则无法使用

下载地址 php_redis extension

Using Redis to store php session

ts(thread safe), nts(thread not safe).

2.3. 将下载的php_redis.dll放在php扩展目录中(ext).

3. 配置php.ini添加扩展 extension=php_redis.dll 4. 重启apache服务,查看phpinfo()出现redis块表示成功。

Using Redis to store php session

5 设置php.ini的session存储模式 session.save_handler = redis session.save_path=“tcp://127.0.0.1:6379”;

如果有多台redis服务器可以设置为: session.save_path=“tcp://10.10.0.1:6379?weight=4,tcp://10.10.0.2:6379?weight=6”

6 测试

测试php代码

$redis = new Redis(); $redis->connect(“127.0.0.1","6379"); //php客户端设置的ip及端口 //存储一个 值 $redis->set("say","Hello World"); echo $redis->get("say"); //应输出Hello World //存储多个值 $array = array('first_key'=>'first_val', 'second_key'=>'second_val', 'third_key'=>'third_val'); $array_get = array('first_key','second_key','third_key'); $redis->mset($array); var_dump($redis->mget($array_get));

命令行查看结果

redis-cli.exe keys *

CentOS下配置php+redis

1. 安装redis服务器

下载redis-server代码并安装

mkdir /tmp/rediscd /tmp/rediswget http://download.redis.io/releases/redis-2.8.8.tar.gztar xzf redis-*cd redis-* makesudo make install clean ##copy configure filemkdir /etc/rediscp redis.conf /etc/redis/redis.conf

配置文件示例

#start as a daemon in backgrounddaemonize yes#set port, by default is 6379port 6379#set ip on which daemon will be listening for connectionsbind 127.0.0.1#where to dump databasedir /var/opt

检查服务安装位置:

whereis redis-server#redis-server: /usr/local/bin/redis-serve

设置redis-server跟随系统启动

vi /etc/rc.local#在exit 0之前插入如下命令/usr/local/bin/redis-server /etc/redis/redis.conf#开启服务redis-server /etc/redis/redis.conf#连接服务redis-cli 2. 安装php_redis扩展

下载php-redis扩展并安装

cd /tmpwget https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zipunzip phpredis.zipcd phpredis-*phpize./configuremake && make install 3. 配置php.ini

插入redis配置

session.save_handler = redissession.save_path = "tcp://10.44.64.8:6379"extension=redis.so

设置完成。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。