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

设置完成。

 

Using Redis to store php session的更多相关文章

  1. Redis安装及实现session共享

    一.Redis介绍 1.redis是key-value的存储系统,属于非关系型数据库 2.特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会 ...

  2. PHP中Redis替代文件存储Session语句

    php默认使用文件存储session,如果并发量大,效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 这里,介绍下php的 session_set_s ...

  3. nginx+tomcat+redis的集群+session共享

    nginx+tomcat+redis的集群+session共享 环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 ...

  4. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  5. PHP中使用Redis接管文件存储Session详解

    前言 php默认使用文件存储session,如果并发量大,效率会非常低.而redis对高并发的支持非常好,可以利用redis替换文件来存储session. 最近就遇到了这个问题,之前找了网上的一套直播 ...

  6. PHP中如何使用Redis接管文件存储Session详解

    https://www.jb51.net/article/151580.htm 前言 php默认使用文件存储session,如果并发量大,效率会非常低.而redis对高并发的支持非常好,可以利用red ...

  7. Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库

    为什么要这样做? 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储. 在使用的过程中觉得这个默认的设置挺 ...

  8. 转:Spring-session & redis 子域名共享session

    Spring-session & redis 子域名共享session 例子: a.example.com b.example.com spring 版本 4.2.6.RELEASE Spri ...

  9. 用redis实现跨服务器session(转)

    这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两 ...

随机推荐

  1. centos之Haproxy 负载均衡学习笔记

    HAProxy的特点是:1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机:2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3.支持url检测后端的 ...

  2. elasticsearch从mysql导入数据

    详细:https://github.com/jprante/elasticsearch-jdbc(最下面有各数据库的导入方法说明) elasticsearch版本为1.5.2 1.下载 elastic ...

  3. Default Web Site

    win7上设置默认website的物理路径

  4. FastDFS问题汇总

    问题1: 增加分组后,新的storge不可用. 增加一个分组group2,发现上传文件失败.在group2中的storage中使用netstat -anp|grep fdfs,发现端口状态为CLOSE ...

  5. servlet基本概念

    一.servlet是一个供其它java程序调用的java类,比方tomcatserver,它不能独自执行,它的执行由servlet引擎来控制和调度. 二.servlet是单例,多线程 针对多个clie ...

  6. Business Intelligence(BI) 商务智能

    商业智能技术正是一种能够帮助企业迅速地完成信息采集.分析的先进技术.它以数据仓库(Data Warehousing).在线分析处理(OLAP).数据挖掘(Data Mining)3种技术的整合为基础, ...

  7. python基础(一)------Python基础语法与介绍

    编程语言的历史和Python开发 一.编程语言 1.编程语言也是"语言"与英语,汉语等类似,掌握其语法结构,灵活 的运用其语法规则为之重要.          编程语言实现的是程序 ...

  8. SourceTree 03 - 跳过账号登录直接进入主界面

    SourceTree系列第1篇 SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/geaosu/p/8807666.html) SourceTree系列 ...

  9. 爬虫基础之requests模块

    1. 爬虫简介 1.1 概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 1.2 爬虫的价值 在互 ...

  10. css3的clip-path方法剪裁实现

    本例讲解如何通过clip-path把一个div(元素,可以是图片等)裁切成不同的形状,这里以一个div为例宽高均为300px 注意:不支持IE和Firefox,支持webkit浏览器,在现代浏览器中需 ...