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+MySQL投票系统的设计和实现分享
Sep 23 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
php抓取页面的几种方法详解
Jun 17 PHP
php/js获取客户端mac地址的实现代码
Jul 08 PHP
php数组去重复数据示例
Feb 25 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
php png失真的原因及解决办法
Nov 17 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
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php Calender(日历)代码分享
2014/01/03 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
nodejs基础应用
2017/02/03 NodeJs
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
记录Django开发心得
2014/07/16 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python实现代码统计器
2019/09/19 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
中专毕业生个人职业生涯规划
2014/02/19 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android