一、Redis介绍

1、redis是key-value的存储系统,属于非关系型数据库

2、特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会丢失)

3、支持5种数据类型:string,hash,list,set,zset

4、两种文件格式(即数据持久化)

(1)RDB(全量数据):多长时间/频率,把内存中的数据刷到磁盘中,便于下次读取文件时进行加载

(2)AOF(增量请求):类似mysql的二进制日志,不停地把对数据库的更改语句记录到日志中,下次重启服务,会根据二进制日志把数据重写一次,加载到内存里,实现数据持久化

5、存储

(1)内存存储 (2)磁盘存储(RDB)  (3)log文件(AOF)

二、Redis安装

1、下载 redis-2.8.21.tar.gz

2、解压:  tar zxvf redis-2.8.21.tar.gz

3、cd redis-2.8.21

4、编译:make

5、安装: make PREFIX=/usr/local/redis install

6、创建配置文件所在的目录:mkdir /usr/local/redis/etc

7、网上下载配置文件 redis.conf,放到 6 创建的目录下

8、创建启动脚本 /etc/init.d/redis

9、添加redis用户:useradd -s /sbin/nologin redis

10、创建var目录,放置redis 的pid,rdb文件:  mkdir /usr/local/redis/var

11、修改var目录和配置文件权限

(1)chmod 777 /usr/local/redis/var

(2)chmod 755 /etc/init.d/redis

12、启动redis:  service redis start

13、ps aux | grep redis      ——》 监听6379端口

三、php应用redis

前提:已经搭建了LAMP网站架构

php不能直接连redis,需要redis模块的支持(redis是和开发语言结合使用的)

1、Redis扩展模块安装
(1)下载 phpredis.zip
(2)解压:unzip phpredis.zip
(3)cd phpredis-develop/
(4)/usr/local/php/bin/phpize   ——》生成 configure文件
(5)编译redis.so的模块
./configure --with-php-config=/usr/local/php/bin/php-config
(6)make && make install
(7)检查是否有redis.so文件
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
——》 redis.so
(8)编辑php.ini配置文件
最后1行加上
extension=redis.so
(9)php检查是否加载了redis.so模块
/usr/local/php/bin/php -m |grep redis
——》redis
 
 
 
2、Redis 实现session共享
(1)apache测试目录下创建info.php ——》 调用 phpinfo() 函数
(2)apache虚拟主机配置文件(extra目录下)或者主配置文件httpd.conf 中定义
session存储的处理方式和存储路径
(a)php_value session.save_handler "redis"
(b)php_value session.save_path "tcp://127.0.0.1:6379"
 
ps: 还有另外两种方法
1、php的全局配置文件php.ini添加上面2行
2、如果是lnmp架构

php-fpm.conf对应的pool中加入 
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"
 
 
(3)重启apachectl
/usr/local/apache2/bin/apachectl restart
(4)浏览器访问:192.168.131.110/info.php

说明配置已经生效

3、Redis 存储session 测试

(1)进入apache的htdoc下

(2)创建session.php

 <?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>

(3)测试  ——》 记得去掉redis配置文件中的密码设置,否则会返回500授权错误

(a)curl localhost/session.php

(b)redis-cli  ——》 在家目录的.bashrc加入了redis启动目录

说明session已经存入到redis里了

四、redis的一些题外话

redis一些重点

1、主从

2、持久化

3、哨兵实现主从切换

4、sentinel原理 (2.8.0之后有这个功能 sentinel.conf)

5、数据类型: hash,string 用得多

着重讲下哨兵

1、支持redis协议

2、原理简单描述

所有服务器都部署哨兵,哨兵去监控主从,要是redis或者哨兵死了,另外所有的机器会重新投票(就是下图6379后面的数字,比如2),投死那台挂掉的机器(2台机器投票确认机器死了),再在另外所有的机器上自成一个体系,重新生成主

3、重点

(1)哨兵的配置文件也就是sentinel.conf是时时发生变化的

当主被投票死掉后,从起来于是产生一个新的主ip,新主会变成配置文件master的ip

(2)redis的配置文件也会改变

(3)当已死的主恢复后,就变成了从

(4)哨兵一定要是单数,否则选举易出现问题,偶数可能会同票

4、几个问题

(1)什么时候用redis?

所有的web第一次请求,先从db上取,取到的结果再返回给客户端的同时也写到redis去,
当再次用到这个结果时就从redis取,不需要再从db上取(很慢)
 
(2)什么时候用redis高可用,也就是哨兵?
所有的研发程序需要连主(可写),从(只读)是写不进去东西的
主redis有一个vip或者直连它的物理ip,研发程序直连redis写东西时,
redis主挂了,哨兵就起到作用
 
redis取不到数据,就从db上取——》程序做的,自动的降级
如果程序没有做降级,redis主挂了,线上所有涉及到在redis写的业务都用不了 ——》 所以就要用哨兵
 

redis实现session共享,哨兵的更多相关文章

  1. Tomcat通过Redis实现session共享的完整部署记录

    对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每 ...

  2. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  3. 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享

    因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXi ...

  4. 分布式Session共享(一):tomcat+redis实现session共享

    一.前言 本文主要测试redis实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port Tomcat ...

  5. 负载均衡,最理想使用 redis实现session共享

    负载均衡在多台php服务器负载均衡的情况下,第一秒请求是a服务器,第二秒请求是b服务器, session必须放在一个公共的服务器,最理想是使用 redis实现session共享.内存的速度比磁盘访问快 ...

  6. 单点登录实现(spring session+redis完成session共享)

    一.前言 项目中用到的SSO,使用开源框架cas做的.简单的了解了一下cas,并学习了一下 单点登录的原理,有兴趣的同学也可以学习一下,写个demo玩一玩. 二.工程结构 我模拟了 sso的客户端和s ...

  7. Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享

    小伙伴们好久不见!最近略忙,博客写的有点少,嗯,要加把劲.OK,今天给大家带来一个JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redi ...

  8. CentOS7 PHP+Redis实现Session共享

    先yum简单的安装redis wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo ...

  9. spring-session+Redis实现Session共享

    关于session共享的方式有多种: (1)通过nginx的ip_hash,根据ip将请求分配到对应的服务器 (2)基于关系型数据库存储 (3)基于cookie存储 (4)服务器内置的session复 ...

随机推荐

  1. oracle高性能的SQL语句的写法

    1.当多表查询的时候,把数据量小的表放在最后面,ORACLE会把最后面的表当作基础表,因为表间连接时,最右边的表会被放到嵌套循环的最外层.最外层的循环次数越少,效率越高. 2.Oracle采用自下而上 ...

  2. dedecms织梦如何调用指定的多个栏目导航

    {dede:channelartlist row='2' typeid='1,2这里输入多个指定的栏目ID' } <li><a href='{dede:field name='typ ...

  3. .net 字符串驻留

    .net中的string表达的是常量字符串. JIT编译器编译时判断遇到的常量字符串是否在内部散列表中,如果不在,添加进去.当第一次执行到含字符串的方法时,CLR会检查该字符串是否在内部的一个散列表中 ...

  4. 多媒体开发之---h264格式slice_header

    从Slice_Header学习H.264 写在前面: $     H.264我是结合标准和毕厚杰的书一块学的.看句法语义时最是头疼,一大堆的元素,很需要耐心.标准中在介绍某个元素的语义时,经常会突然冒 ...

  5. Android数据适配器(Adapter)优化:使用高效的ViewHolder

    原文链接:http://stackvoid.com/using-adapter-in-efficiency-way/ 在使用Listview或GridView的时候,往往须要自己定义数据适配器.一般都 ...

  6. XSD文件详解(二)

    <?xml version="1.0" encoding="gb2312"?> <studentlist>   <student  ...

  7. 关于KMP算法的感想

    今天,看了KMP,首先是在网上看的,看了很久没看懂,有很多思想,很多next的推导,就相当于很多的版本,后来,去看了<<大话数据结构>>这本书,才看懂,这KMP的神奇之处,这本 ...

  8. 【HTML5开发系列】meta元素详解

    meta元素可以用来定义文档的各种元数据.他有很多种用法,一个HTML文档可以包含多个meta元素. meta元素在HTML5中的变化 charset属性是HTML5中新增的.在HTML4中,http ...

  9. PAT 1062. 最简分数(20)

    一个分数一般写成两个整数相除的形式:N/M,其中M不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母 ...

  10. 还原sqlserver2008 r2 数据库步骤

    1: 有备份文件bak 文件(是在sqlserver2008 r2上备份的) 数据库下载地址(讯雷) ed2k://|file|cn_sql_server_2008_r2_express_with_m ...