Redis 事务 主从复制及 哨兵sentinel的管理

Redis 事务

什么是事务?
事务是指一系列操作步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。
事务命令

  1. multi:标记一个事务的开始。
  2. exec:执行所有事务块内的命令。
  3. discard:取消事务,放弃执行事务块中所有命令。
  4. watch key[key]:j监视一个或者多个key,如果在事务执行之前这个(这些)key被改动,则事务将被打断。
  5. unwatch:取消对所有key进行监听。如果在执行unwatch之后, exec 和discard先被执行的话,那么就不需要执行unwatch了。
    事务的执行步骤: 首先开启事务, 其次向事务队列中加入命令,最后执行事务提交
    WATCH 机制原理:
    WATCH 机制:使用 WATCH 监视一个或多个 key , 跟踪 key 的 value 修改情况, 如果有key 的 value 值在事务 EXEC 执行之前被修改了, 整个事务被取消。EXEC 返回提示信息,表示事务已经失败。
    何时取消 key 的监视(WATCH)?
    ① WATCH 命令可以被调用多次。 对键的监视从 WATCH 执行之后开始生效,直到调用 EXEC 为止。不管事务是否成功执行, 对所有键的监视都会被取消。
    ② 当客户端断开连接时, 该客户端对键的监视也会被取消。
    ③ UNWATCH 命令可以手动取消对所有键的监视

Redis是持久化方式: RDB和AOF(默认)

Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB总结
优点:由于存储的是数据快照文件,恢复数据很方便,也比较快
缺点:
1)会丢失最后一次快照以后更改的数据。如果你的应用能容忍一定数据的丢失,那么使用 rdb 是不错的选择;如果你不能容忍一定数据的丢失,使用 rdb 就不是一个很好的选择。
2)由于需要经常操作磁盘,RDB 会分出一个子进程。如果你的 redis 数据库很大的话,子进程占用比较多的时间,并且可能会影响 Redis 暂停服务一段时间(millisecond 级别),如果你的数据库超级大并且你的服务器 CPU 比较弱,有可能是会达到一秒。
Append-only File(AOF),Redis 每次接收到一条改变数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。
AOF总结:
1)append-only 文件是另一个可以提供完全数据保障的方案;
2)AOF 文件会在操作过程中变得越来越大。比如,如果你做一百次加法计算,最后你只会在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录对最终的结果是无用的;但 Redis 支持在不影响服务的前提下在后台重构 AOF 文件,让文件得以整理变小
3)可以同时使用这两种方式,redis 默认优先加载 aof 文件(aof 数据最完整)
RDB和AOF 区别:
1.RDB 恢复数据时比其他 AOF 速度快

Redis 的主从复制实现

方式 1:修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系
实现步骤
环境:模拟多 Reids 服务器, 在一台已经安装 Redis 的机器上,运行多个 Redis 应用模拟多 个 Reids 服务器。一个 Master,两个 Slave

  1. 新建三个 Redis 的配置文件
  2. 编辑 Master 配置文件 编辑 Master 的配置文件 redis6380.conf : 在空文件加入如下内容
include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb

配置项说明:
include : 包含原来的配置文件内容。/usr/local/redis-3.2.9/redis.conf 按照自己的目录设置。
daemonize:yes 后台启动应用,相当于 ./redis-server & , &的作用。
port : 自定义的端口号
pidfile : 自定义的文件,表示当前程序的 pid ,进程 id。
logfile:日志文件名
dbfilename:持久化的 rdb 文件名
3. 编辑 Slave 配置文件 编辑 Slave 的配置文件 redis6382.conf 和 redis6384.conf: 在空文件加入如下内容
①:redis6382.conf:

include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid
logfile 6382.log
dbfilename dump6382.rdb
slaveof 127.0.0.1 6380

②:redis6384.conf:


include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6384
pidfile /var/run/redis_6384.pid
logfile 6384.log
dbfilename dump6384.rdb
slaveof 127.0.0.1 6380

配置项说明:
slaveof : 表示当前 Redis 是谁的从。当前是 127.0.0.0 端口 6380 这个 Master 的从。
4. 启动服务器 Master/Slave 都启动
5. 查看配置后的服务信息
①: Redis 客户端使用指定端口连接 Redis 服务器
./redis-cli -p 端口
②:查看服务器信息
info replication
6. 测试: 主服务器写 从服务器读
方式 2: ./redis-server --slaveof ,在启动 redis 时指定当
前服务成为某个主 Redis 服务
redis手动的主从复制总结
1、一个 master 可以有多个 slave
2、slave 下线,读请求的处理性能下降
3、master 下线,写请求无法执行
4、当 master 发生故障,需手动将其中一台 slave 使用 slaveof no one 命令提升为 master,其它 slave 执行 slaveof 命令指向这个新的 master,从新的 master 处同步数据
5、主从复制模式的故障转移需要手动操作,要实现自动化处理,这就需要 Sentinel 哨兵,实现故障自动转移

Sentinel 哨兵

作用:用它来监控多个 Redis 服务实例的运
行情况。Redis Sentinel 是一个运行在特殊模式下的 Redis 服务器。Redis Sentinel 是在多个Sentinel 进程环境下互相协作工作的。

发布了16 篇原创文章 · 获赞 0 · 访问量 277

猜你喜欢

转载自blog.csdn.net/weixin_44094017/article/details/104700946