redis之事务&&主从复制

来源:互联网 发布:淘宝怎么寄东西到澳洲 编辑:程序博客网 时间:2024/06/16 06:54

开启事务

MULTI  //事务开启set k1 v1set k2 v2set k3 v3get k3EXEC //执行事务,一次性执行全部的命令1) OK2) OK3) OK4) "v3"//如果不想继续执行事务,可以放弃事务DISCARD //放弃事务//如果在开启事务的过程中,发生错误,那么事务都将失败,要么一起成功,要么一起失败//如果是在开启事务过程中没有错误,执行的时候错误,也就是最后一步EXEC错误,那就冤有头债有主,就那个错误的操作失败

主从复制

可以在一台机器上模拟这个过程,将redis.conf复制三份,每份修改端口号和日志名称即可,打开终端,
假如第一台机器为主,其它两台为从,那好,我们要把第一台机器上的东西复制到其它两台,可以用如下命令SLAVEOF 端口号端口号为主机redis端口,查看状态命令(INFO replication):

127.0.0.1:6379> INFO replication# Replicationrole:master   //扮演的角色,主机connected_slaves:0   //它带的小弟(从机个数)master_replid:ae92f780fa4564caa1ca94be1e0e7384f2625a53master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0

下面分析特殊情况:

1,假如,主机死了(宕机了),从机会不会上位成为主机??thinking

2,主机又复活了,从机还能不能继续连接这个主机?

3,从机死了又复活了,还能继续连接这个主机吗?

第一个答案NO,第二个YES,第三个答案是与主机断开了,必须重新执行SLAVEOF命令连接主机端口,否则会默认新开了一个主机。

Are you understand ?

薪火相传:

假如还是用上面的三个redis,将它们命名为A,B,C,刚才的情况是A为主机,B,C都是从机,现在变成了,A为主机,B为连接A的从机,C为连接B的从机,那么B的角色是slaver or master ? 答案是slaver,虽然它相对C来说是master,但是总体而言,它只是个包工头的角色,所以还是slaver。

反客为主:

主机A挂掉了,从B和C中选出一个当主机有这样一个命令,例如在B中使用SLAVEOF no one自立山头,变成老大了,角色变成了master,C可以用SLAVEOF命令连接新老大端口,当A重新回来时,也就没它的事,成了光杆司令。

哨兵模式(反客为主自动版):

主机挂掉后,从机投票成为主机的过程,在redis.conf目录下新建一个sentinel.conf文件,里面的内容是sentinel monitor 被监控的redis主机名字 127.0.0.1 端口号 num最后的num参数是主机投票数>=num的,成为主机。