Redis事务+持久化+主从复制+Redis集群

Redis事务

  • Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

    • Redis事务的主要作用就是串联多个命令防止别的命令插队。

  • Redis事务中的三个命令

    • Multi   、Exec 、 discard

      • Redis事务+持久化+主从复制+Redis集群_第1张图片

      • Multi 相当于攒SQL  命令队列 不会执行

      • Exec会依次执行 命令队列中的命令

      • discard 放弃攒SQL 命令

    • 错误处理

      • Redis事务+持久化+主从复制+Redis集群_第2张图片

      • Redis事务+持久化+主从复制+Redis集群_第3张图片

      • flushdb 清空当前库

    • multi 攒命令

      • Redis事务+持久化+主从复制+Redis集群_第4张图片

      • 一步错  步步错  执行时被取消

      • Redis事务+持久化+主从复制+Redis集群_第5张图片

      • 执行阶段错误

        • Redis事务+持久化+主从复制+Redis集群_第6张图片

          • 只有执行错误的不执行

      • Redis事务+持久化+主从复制+Redis集群_第7张图片Redis事务+持久化+主从复制+Redis集群_第8张图片

      • Redis就是利用check-and-set机制实现事务的。

        • 上锁  监视 可以监视一个或多个Key

        • Redis事务+持久化+主从复制+Redis集群_第9张图片

        • Redis事务+持久化+主从复制+Redis集群_第10张图片

        • Redis事务+持久化+主从复制+Redis集群_第11张图片

        • 版本不同,更新过 就会打断事务

      • 事务的特性

        • Redis事务+持久化+主从复制+Redis集群_第12张图片

        • 隔离级别

        • 读未提交 不可避免脏读

        • 读已提交    不可避免重复读和幻读  orcle默认

        • 可重复读  不可避免幻读     Mysql 默认 

        • 序列化      全部避免  

  • Redis的持久化

    • 再谈Redis和MemeCache的区别

      • Redis支持持久化   MemCache 不支持

      • MemCache 只支持简单的key-value     Redis除了简单的key-value之外还有五大数据类型

      • MemCache 是多线程加锁的形式  Redis是单线程+多路IO复用

    • 两种持久化方式

      • RDB

        • flushdb后 dump.rdb文件会变小

        • 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。

        • 备份是如何执行的

          • Redis事务+持久化+主从复制+Redis集群_第13张图片

          • 缺点 :最后一次持久化后的数据可能丢失

          • Redis事务+持久化+主从复制+Redis集群_第14张图片

          • Redis事务+持久化+主从复制+Redis集群_第15张图片

          • rdb 文件默认存储在启动redis的目录中

        • 手动指定 rdb 文件存储的位置 

        • 默认shutdown时会持久化 一次  bgsave 手动持久化

          • Redis事务+持久化+主从复制+Redis集群_第16张图片

          • bgsave  :background  手动后台保存

          • 改成  save 60 10

          • 备份

          • Redis事务+持久化+主从复制+Redis集群_第17张图片

          • 一分钟内存10个key观察 到 rdb自动保存快照

            • 问题: 在输入十个后就会持久化, 但是后续输入的key有可能不被持久化到

        • 其他配置

          • Redis事务+持久化+主从复制+Redis集群_第18张图片

          • Redis事务+持久化+主从复制+Redis集群_第19张图片

        • RDB方式的特点

          • Redis事务+持久化+主从复制+Redis集群_第20张图片

      • AOF

        • Redis事务+持久化+主从复制+Redis集群_第21张图片

        • Redis事务+持久化+主从复制+Redis集群_第22张图片

        • AOF和RDB同时开启,Redis听AOF的

          • 即按AOF文件进行恢复

        • Redis事务+持久化+主从复制+Redis集群_第23张图片

        • redis-check-aof  --fix   appendonly.aof  可以修复aof文件

        • Redis事务+持久化+主从复制+Redis集群_第24张图片

        • Redis事务+持久化+主从复制+Redis集群_第25张图片

        • bgrewriteaof :重写可以把多句重复命令合并在一起

        • Redis事务+持久化+主从复制+Redis集群_第26张图片

        • Redis事务+持久化+主从复制+Redis集群_第27张图片

        • Redis事务+持久化+主从复制+Redis集群_第28张图片

        • Redis事务+持久化+主从复制+Redis集群_第29张图片

  • Redis主从复制

    • 就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制

      • 主机主要负责写,从机主要负责读

      • Redis事务+持久化+主从复制+Redis集群_第30张图片

      • 主要用途:

        • 读写分离,性能扩展

        • 容灾快速回复

    • 配置过程

      • Redis事务+持久化+主从复制+Redis集群_第31张图片

      • 示例:

        • 关掉appendaof no

        • 创建原始redis配置备份  redis6379.conf

        • Redis事务+持久化+主从复制+Redis集群_第32张图片

        • 将redis6379.conf复制几份

          • cp redis6379.conf redis6380.conf

        • %s/6379/6380整体替换

    • 命令

      • info replication (主从复制)

        • 打印主从复制的相关信息

      • slaveof     拜师

        • 成为某个实例的从服务器   

                      • ctrl +l =clear

      • Redis事务+持久化+主从复制+Redis集群_第33张图片

      • Redis事务+持久化+主从复制+Redis集群_第34张图片    在其他两台slaveof 127.0.0.1 6379

        • 从机显示Redis事务+持久化+主从复制+Redis集群_第35张图片

        • 主机显示Redis事务+持久化+主从复制+Redis集群_第36张图片

      • 主机set的key 从机会保存, 从机无法set

      • 问题:

        • 主机宕机时,从机如何操作

        • 主机从宕机状态恢复时,从机如何操作

    • 主机宕机时,从机如何操作

      • 默认情况下,主机宕机,从机不上位,主机恢复时仍然是主机;若从机宕机,恢复时,从机不再是从机

      • Redis事务+持久化+主从复制+Redis集群_第37张图片

      • 1.从头开始复制

      • 2.从机不可以写,只可以读get

      • 3.从机原地待命

      • 4.主机恢复后,从机仍可顺利复制

      • 5.从机恢复后,不再是该主的从机,变成初始状态

        • 从机可以继续收从机

    • Redis事务+持久化+主从复制+Redis集群_第38张图片

    • Redis事务+持久化+主从复制+Redis集群_第39张图片

    • 主机宕机时顶替主机

      • Redis事务+持久化+主从复制+Redis集群_第40张图片

      • 在从机的redis.conf文件中,加入    

        • slave-priority 100

    • 哨兵模式

      Redis事务+持久化+主从复制+Redis集群_第41张图片
      • Redis事务+持久化+主从复制+Redis集群_第42张图片

      • Redis事务+持久化+主从复制+Redis集群_第43张图片

        • 如果之前宕机的主重新上线,会成为当前主机的从机

  • 测试

    • 一主二仆

      • 当配置了哨兵之后,主机宕机会寻找slave-priority 优先级最高的人作为新的主机

        • Redis事务+持久化+主从复制+Redis集群_第44张图片

      • 当宕机的主机重新连接后,变为新主机的从机

        • Redis事务+持久化+主从复制+Redis集群_第45张图片

    • Redis 集群

      • 为什么要集群?

        • 容量不够,redis如何进行扩容?

        • 并发读写操作,redis如何分摊?

      • 分布式和集群的区别

        • 分布式是把数据存放在多个机器上,每个机器放不一样的内容

        • 集群是在多个机器上把数据平均分成n份,机器上可能有不一样的内容

    • Redis事务+持久化+主从复制+Redis集群_第46张图片

    • 搭建集群

      • 安装ruby环境

      • Redis事务+持久化+主从复制+Redis集群_第47张图片

      • Redis事务+持久化+主从复制+Redis集群_第48张图片

      • Redis事务+持久化+主从复制+Redis集群_第49张图片

    • 准备6个实例,6379/6380/6381/6389/6390/6391

      • Redis事务+持久化+主从复制+Redis集群_第50张图片

      • Redis事务+持久化+主从复制+Redis集群_第51张图片

      • cluster-enabled yes

      • cluster-config-file node-6379.conf

      • cluster-node-timeout 15000

        • Redis事务+持久化+主从复制+Redis集群_第52张图片

    • 去中心化 模式的集群 

      •  

        • Redis事务+持久化+主从复制+Redis集群_第53张图片

        • Redis事务+持久化+主从复制+Redis集群_第54张图片

      • 将6个合体

        • Redis事务+持久化+主从复制+Redis集群_第55张图片Redis事务+持久化+主从复制+Redis集群_第56张图片

        • 192.168.9.35:6389  192.168.9.35:6390 192.168.9.35:6391

        •  Redis事务+持久化+主从复制+Redis集群_第57张图片

          • Redis事务+持久化+主从复制+Redis集群_第58张图片

          • redis-cli -c -p 6379   (-c   cluster)

          • 自动带到机器上

          • Redis事务+持久化+主从复制+Redis集群_第59张图片

        • Redis事务+持久化+主从复制+Redis集群_第60张图片

        • Redis事务+持久化+主从复制+Redis集群_第61张图片

        • Redis事务+持久化+主从复制+Redis集群_第62张图片

        • Redis事务+持久化+主从复制+Redis集群_第63张图片

        • 一个slot  可以放多个键值对 ,类似于拉链法使用CRC计算

        • Redis事务+持久化+主从复制+Redis集群_第64张图片

        • Redis事务+持久化+主从复制+Redis集群_第65张图片

        • JedisCluster 

        • Redis事务+持久化+主从复制+Redis集群_第66张图片

          Set set=new  HashSet();

          redis.clients.jedis.HostAndPort e=new  redis.clients.jedis.HostAndPort("192.168.9.35", 6379);

          set.add(e);

          JedisCluster jCluster=new JedisCluster(set);

          jCluster.set("k2", "v2");

          System.out.println(jCluster.get("k2"));

          

Redis事务+持久化+主从复制+Redis集群_第67张图片    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(大数据学习笔记)