一、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

 1 <?php
 2     session_start();
 3     if (!isset($_SESSION['TEST'])) {
 4         $_SESSION['TEST'] = time();
 5     }
 6     $_SESSION['TEST3'] = time();
 7     print $_SESSION['TEST'];
 8     print "<br><br>";
 9     print $_SESSION['TEST3'];
10     print "<br><br>";
11     print session_id();
12 ?>

(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写的业务都用不了 ——》 所以就要用哨兵

转载于:https://www.cnblogs.com/windysai/p/6226995.html

redis实现session共享,哨兵相关推荐

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

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

  2. SpringBoot整合Redis+Redis缓存应用+Redis实现Session共享+...

    一.SpringBoot整合Redis 1.导入依赖 <!--存在Redis依赖--> <dependency><groupId>org.springframewo ...

  3. Rainbond最佳实践:Tomcat配置Redis实现Session共享

    Rainbond:生产级无服务器PaaS Rainbond是国内首个开源的生产级无服务器PaaS,深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术 ...

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

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

  5. php 获取cookieid,Redis实现Session共享详解

    Redis实现Session共享 这几天在做session共享这么一个小模块,也查了好多资料,给我的感觉,就是太乱了,一直找不到我想要的东西,几乎全部实现方法都与我的想法不一样,在这里,我总结一下自己 ...

  6. C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录

    categories: 架构 author: mrzhou tags: SpringBoot redis session 单点登录 基于SpringBoot+Redis的Session共享与单点登录 ...

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

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

  8. Tomcat集群通过redis实现session共享

    Tomcat集群通过redis实现session共享 最近在XXX项目上做了tomcat集群的session共享,闲来无事鄙人将整个踩坑的过程粗糙的记录下来,给同学们分享一波,整个过程无硬编码,爽歪歪 ...

  9. tomcat集群redis配置session共享

    针对之前的nginx+tomcat的负载均衡机制,因为会出现session丢失的问题,特研究了下redis的session共享:下载JDK7.tomcat7以备后续测试: 一.下载tomcat-red ...

最新文章

  1. bzoj1070————2016——3——14
  2. pytorch volatile 和 requires_grad
  3. 【bzoj 2460 [BeiJing2011]元素】
  4. python的datetime举例_Python datetime.timedelta()用法及代码示例
  5. 手游传奇架设教程_问道手游如何多开?
  6. vue-axios下载文件流blob,ie下载报传递给系统调用的数据区域太小.ie文件流下载报错;文件下载失败将blob的错误信息转换成json格式
  7. python入门之字符串处理_Python基础之字符串操作,格式化。
  8. P60 ---AI 在P60 上的人应用
  9. 计算机一级第103套题,全国计算机等级考试一级试题
  10. ORACLE sid,pid,spid总结
  11. 输入日期java_java怎么格式化输入日期
  12. DOS BAT脚本批量打开Edge网页
  13. [SV]SystemVerilog Structured Procedures --- always_comb、always_ff、always_latch
  14. 童年记忆中的优良环境
  15. 俄亥俄大学计算机科学专业,美国计算机科学专业最新排名!
  16. 电商运营如何打造爆品?
  17. android 主流框架与技术
  18. jsp制作的个人网站
  19. kubernetes HPA
  20. 双11是结束了,但这场没有硝烟的“战争”却没有结束

热门文章

  1. docker挂载的目录无法读写
  2. 软件项目风险管理介绍
  3. HDOJ 1428 漫步校园
  4. 2.3.3 mysql 权限系统介绍
  5. 8.5-7 mkfs、dumpe2fs、resize2fs
  6. android studio 反编译工具,android studio反编译工具jd-inteIIij
  7. java okhttp https_OkHttp是否支持接受自签名SSL证书?
  8. oraclesqldeveloper 批量插入多个存储过程_MongoDB如何批量执行写操作
  9. 秒懂边缘云丨快速入门边缘云
  10. 快手基于 Flink 的持续优化与实践