1. Redis持久化方案
redis有rdb和aof两种持久化方案
  • 1)rdb方式
    • 当符合一定条件时会自动将内存中的所有数据执行快照操作并存储到硬盘上
    • 默认存储在redis根目录的dump.rdb文件中,文件名在配置文件中可修改
    • 文件保存方式是覆盖,在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。 这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份。 RDB文件是经过压缩的二进制文件,占用的空间会小于内存中的数据,更加利于传输。
    • redis.conf中的默认配置
      • save 900 1 ##15分钟有1条key变化save一次
      • save 300 10 ##5分钟有10条key变化save一次
      • save 60 10000 ##1分钟有10000条key变化save一次
    • 手动执行save
      • save:由主进程进行快照操作,会阻塞其它请求
      • bgsave:由redis执行fork函数复制出一个子进程来进行快照操作,不阻塞
    • 优点:
      • 由于存储的有数据快照文件,恢复数据很方便
    • 缺点:
      • 保存点设置过大,就会导致宕机丢失的数据过多
      • 保存点设置过小,又会造成IO瓶颈
  • 2)aof方式
    • aof方式的持久化是通过日志文件的方式。
    • 默认情况下redis没有开启aof,可以通过参数appendonly参数开启
    • 默认的文件名是appendonly.aof,可以通过appendfilename参数修改
    • aof持久配置:
      • appendfsync always 每次都会执行
      • appendfsync everysec 默认 每秒执行一次同步操作(推荐)
      • appendfsync no不主动进行同步,由操作系统来做,30秒一次
    • 优点:Redis会将每一个收到的写命令都通过Write函数追加到文件中,便于追踪
    • 缺点:保存的文件比rdb要大很多
  • 3)当redis启动时,如果rdb持久化和aof持久化都打开了,那么会优先使用aof方式
  • 4)项目中到底该用哪个?下面是来自官方的建议:
    • 通常,如果你要想提供很高的数据保障性,那么建议你同时使用两种持久化方式。
    • 如果你可以接受灾难带来的几分钟的数据丢失,那么你可以仅使用RDB。
    • 很多用户仅使用了AOF,但是我们建议,既然RDB可以时不时的给数据做个完整的快照,并且提供更快的重启,所以最好还是也使用RDB。
  1. Redis主从复制
Redis的主机Master上的key发生变化后,会同步到从机Slave上,称为主从复制,只会从master同步到slave,不会从slave同步到master
  • 1)原理:
    • 在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的 命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存 盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命 令,从而达到最终的数据同步。
    • 如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行(该功能需要 在配置文件中配置实现:配置选项# slaveof <masterip> <masterport>,例如:slaveof 127.0.0.1 6379)。
  • 2)实现:
    • 配置slave redis的配置文件,配置slaveof 选项连接主机即可
    • 可以使用一个Redis环境,复制多个配置文件,配置不同的端口,实现多个Redis启动环境
  • 3)例子:
    • 1)配置slave的连接主机
    • 2)启动master服务器:redis-server.exe redis.conf
    • 3)启动slave服务器:redis-server.exe redis.conf
    • 4)启动master客户端:redis-cli.exe -h IP-p PORT
    • 5)启动slave客户端:redis-cli.exe -h IP-p PORT
    • 6)在master客户端中执行新增key操作:set key test
    • 7)在slave客户端中查看key:keys *(master新增的key会在slave中看到)
    • 8)在slave客户端中执行新增key操作:set key test2
    • 9)在master客户端中查看key:keys *(slave新增的key会在master中没有)
  1. Redis读写分离
Redis的读写分离指一台Redis主机用来记录更新操作,其余多台主机执行查询操作,且数据可以从主机同步到从机,实现原理就是主从复制
  1. Redis主从切换
  • 避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能
  • 主从切换时在主从复制的基础上实现sentinel(sentinel是一个单独的应用,在redis2.6版本后随redis发布,并且redis2.8版本中发布的是sentinel 2,之前的版本存在bug,不建议使用)
  • 实现:
    • 1)配置sentinel.conf文件,例:
      • port 26379 ##sentinel进程端口号
      • sentinel monitor mymaster 127.0.0.1 6000 2 ##master主机信息,其中2代表有2台slave提示主机宕机后,在做主从切换,原因在于网络的不确定性。
      • sentinel auth-pass mymaster 123456 ##master的用户名密码
    • 2)启动sentinel服务
      • redis-server sentinel.conf
    • 3)查看服务器日志(6000为master,6001和6002未slave):
 
 
    • 4)杀死master进程,发现主从切换现象
 
    • 5)切换时,会将原6001的slave变成6000的master,原6000的master变成6001端口服务的slave,同时修改对应的sentinel.conf和redis.conf文件的配置修改
  • sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,方式:
    • 多复制几个sentinel.conf文件
    • 启动多个sentinel服务

Redis学习笔记-进阶的更多相关文章

  1. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  2. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  3. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  4. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  5. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  6. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  7. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  8. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  9. PHP学习笔记 - 进阶篇(11)

    PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...

随机推荐

  1. FreeBSD从零开始---安装后配置(二)

    系统优化及安全设置   上次说了FreeBSD基本的软件安装和配置,接下来会说系统的详细配置和安全性设置   一.系统优化设置   1.网络相关设置   网卡和IP地址设置: 如果在安装时没有设置IP ...

  2. 诺基亚N900使用技巧

    一直都对 Linux 的掌上终端挺感冒的,最近从闲鱼上入后一台欧版的,开机进行评测和使用.以下经验仅供新手参考. 选择 N900 是有原因的,首先 N900 相对来说比较小巧(作为 MID,对比起手机 ...

  3. Eclipse使用tomcat的原理

    1. 当我们使用Eclipse将项目部署到Tomcat的时,我们发现,在Tomcat下的webapps目录下并没有我们创建好的项目,但是当通过Eclipse启动服务器后,项目却真的可以访问到,这是为什 ...

  4. 巧用freemarker

    使用Freemarker宏进行可扩展式模块化编程 该文是转载而来,并非我本人所写,但是觉得真心不错,所以收藏一下 一.前言 今天的文章聊一下freemarker的一些特性:宏,我们将使用它写出一些模块 ...

  5. 加载AssetBundle方法

    先介绍一种常用的加载AssetBundle方法 using UnityEngine; using System.Collections; using System.IO; public class L ...

  6. nslookup命令

    nslookup命令可以从本地DNS服务器中查看所有的IP地址和域名信息(它就像一本互联网电话簿).例如,想要找到www.baidu.com的IP地址就可以使用nslookup命令. nslookup ...

  7. Scrum7.0

    Sprint回顾 让我们一次比一次做得更好. 1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:1个小时 参与者:整个团队 场所:课室 秘书:陈程 2.回顾流程 (1)spri ...

  8. [Qt系列] 何处下载,如何安装!

    时间:2016.07.29 -------------------------------------------- 其实方法有很多! 我的思路是想独立使用它,不想联合VS. 下载地址:http:// ...

  9. offer

    八月份仿真实验室国赛以后,我并没有开始做一些关于找工作的准备,而是在做自己感兴趣的cocos2d-x,大概花了一个星期的时间从安装平台到查资料写了一个flappybird小游戏,将近开学了才把找工作的 ...

  10. UCS2和UTF16有区别

    UCS2是定长的,固定2个字节,所以不能支持扩展字符,而UTF16是变长的.   UCS2是落伍的.   msdn里有这样一段描述: UCS-2 is a predecessor of UTF-16. ...