php+redis实现多台服务器内网存储session并读取示例


Posted in PHP onJanuary 12, 2017

大型网站由于大并发的问题会导致系统出现诡异的崩溃性问题这着实让人很是蛋疼,首先考虑的就是负载均衡服务器来处理这个,当然数据库的性能也是非常非常重要的,今天就说下在负载均衡情况下对于session这个问题如何处理,说实话不处理session其实也是可以的,但是在实际的情况中会出现一些让用户体验非常蛋疼的问题,比如购物下单的时候负载均衡调配服务器来回切换的过程中session丢失了,这个时候就尴尬了,用户就会郁闷我擦这什么鬼,于是乎各种担心就会出现,这破网站是不是有什么安全问题等等。下面就来说说这个问题的解决方案,配置php结合redis来存储session,假如我现在有2个(至少)服务器在做负载均衡:

1,主服务器安装php-redis 以及redis服务器端这个不多说去执行命令行yum或apt-get什么的,辅服务器只需要安装php-redis(这两个服务器必须在一个内网中不然外网访问着实不安全的)

2,来吧骚年打开的你服务器上的php.ini文件:

先看看php extension=redis.so是否开启 

session.save_handler = redis

session.save_path = "tcp://【redis主服务器的内网ip】:6379″ 

主和辅服务器的php-redis需要绑定一下ip(ip一致主服务器的redis-server)

redis.conf

bind【redis主服务器的内网ip】

这个为了安全起见设置一个redis链接的密码:

打开 vim /etc/redis/redis.conf

requirepass 通信密码(修改这里)

ok配置好重启redis :

sudo service redis-server restart

3,测试Redis连接和验证:

redis-cli -h 【redis主服务器内网ip】

如果设置了redis链接密码,现在尝试访问数据,应该得到一个AUTH错误接下来执行下

> redis-cli

redis内网ip:6397> keys *

ok了到这步的时候已经完成99%了还差一步就是各种重启额

service apache2 restart

service php5-fpm restart

4,测试session是否写入redis:

<?php

 session_start();
$_SESSION['bieanju'] = array('name' => '别安驹', 'num' => 'http://www.bieanju.com/');
//连接redis
$redis = $this->connectRedis();
//
//检查session_id
echo 'session_id:' . session_id() . '<br/>';

//redis存入的session(redis用session_id作为key,以string的形式存储)
echo 'redis_session:' . $redis->get('PHPREDIS_SESSION:' . session_id()) . '<br/>';

echo 'php_session:' . json_encode($_SESSION['class']);
print_r($_SESSION['bieanju']);

?>

速来围观,没错session写入redis了可以读取了,ok至此对于负载均衡的session也就基本解决了,剩下的就是在项目如何应用那就看你自己的业务需要。

 最后在说一下php是世界上最好的语言,呵呵……

PHP 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
php面向对象值单例模式
May 03 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
实例讲解PHP表单处理
Feb 15 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 #PHP
YII2 实现多语言配置的方法分享
Jan 11 #PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 #PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 #PHP
php实现36进制与10进制转换功能示例
Jan 10 #PHP
php获取当前url地址的方法小结
Jan 10 #PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 #PHP
You might like
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
document.write的几点使用心得
2014/05/14 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
package.json文件配置详解
2017/06/15 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python中list初始化方法示例
2016/09/18 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
数控技术学生的自我评价
2014/02/15 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
python入门之算法学习
2021/04/22 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
JavaScript实例 ODO List分析
2022/01/22 Javascript
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js