Using Redis to store 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编译脚本。
2.2. 下载与编译脚本一致的php_redis扩展
一定要一致,否则无法使用
下载地址php_redis extension
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块表示成功。
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/redis
cd /tmp/redis
wget http://download.redis.io/releases/redis-2.8.8.tar.gz
tar xzf redis-*
cd redis-* make
sudo make install clean ##copy configure file
mkdir /etc/redis
cp redis.conf /etc/redis/redis.conf
配置文件示例
#start as a daemon in background
daemonize yes
#set port, by default is 6379
port 6379
#set ip on which daemon will be listening for connections
bind 127.0.0.1
#where to dump database
dir /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 /tmp
wget https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip
unzip phpredis.zip
cd phpredis-*
phpize
./configure
make && make install
3. 配置php.ini
插入redis配置
session.save_handler = redis
session.save_path = "tcp://10.44.64.8:6379"
extension=redis.so
设置完成。
最新文章
- shmop ftok
- 承接unity外包:2016年VR产业八大发展趋势
- 自制操作系统(七) 加快中断处理,和加入FIFO缓冲区
- Atitit 类库冲突解决方案  httpclient-4.5.2.jar
- Android_开发工具的下载和开发环境的搭建
- 一步步学习NHibernate(2)——配置NHibernate的环境
- Java使用memcached
- Java基础知识强化之IO流笔记45:IO流练习之 把集合中的数据存储到文本文件案例
- [AngularJS + Webpack] Production Setup
- OUTPUT、Merge语句的使用
- Electron
- LDAP索引及缓存优化
- 项目中那些事|ListView中嵌套ListView问题
- struts详细解释拦截器
- 第十五章(附)分布式缓存-Memcached
- java设计模式面试考点
- 一个开源的,跨平台的.NET机器学习框架ML.NET
- 8.1Python面向对象编程(一)
- [Java学习]面向对象-抽象类;接口
- 安卓 build/core/Makefile 以及main.mk
热门文章
- sysbench 安装遇到的问题
- 现代DOJO(翻译)
- [系统开发] Python 实现的 Bind 智能 DNS Web 管理系统
- coderforces 721b
- OAF_文件系列6_实现OAF导出XML文件javax.xml.parsers/transformer(案例)
- SQL Server 2014 SP2发布下载:数十项更新修复
- Win8.1安装Visual Studio 2015提示需要KB2919355
- 如何让CCLayer创造的地图,左右滑动不出现黑边
- R语言将字符串矩阵转化为数值型矩阵
- CentOS 7虚拟机下模拟实现nginx负载均衡