Redis主从复制
主要作用有:
- 数据冗余:数据的热备份
- 故障恢复:当主节点出现问题时,可以由从节点提供服务
- 负载均衡:在主从复制的基础上,配合读写分离,可以主由节点提供写服务,从节点读服务,分担服务器负载
- 高可用的基石:主从复制还是哨兵和集群能实施的基础
配置
只配置从库,不用配置主库,Redis默认自己是主库
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:8ca8b9b49744c816d7c5e4b756c6d98bea328b77
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
windows系统下多开redis配置
复制几份conf文件,修改端口号、日志输出路径、dump.rdb文件名
配置主从
主机不用管,配置从机
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:70
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b0a2083de25acc9a31db695b7755cd0314364df0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70
##############################################################
# 主机信息
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=182,lag=0
master_replid:b0a2083de25acc9a31db695b7755cd0314364df0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:182
##############################################################
# 配置从机2
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=350,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=350,lag=1
master_replid:b0a2083de25acc9a31db695b7755cd0314364df0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:350
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:350
细节
主机可以写,从机只能读
重新连接的时候,从机会进行全量复制,所以不用担心数据不同步问题,正常运行状态是增量复制
Slaveof No One 可以使自己变成主机
哨兵模式
配置哨兵文件sentinel.conf
#sentinel monitor 被监视的名称(随意) host port 是否投票
sentinel monitor myredis 127.0.0.1 6379 1
############################################
# 启动哨兵监视
redis-server sentinel.conf --sentinel
如果主机down了,哨兵会自动选一个从机变成主机,如果主机又回来了,主机自动变成从机
优点:
-
哨兵集群,基于主从复制模式,所有的主从模式配置的优点,他都有
-
主从可以切换,故障可以转移,系统的可用性就会更好
-
哨兵模式就是主从模式的升级
缺点:
- Redis不好在线扩容了,集群容量一旦到达上限,在线扩容就十分麻烦
- 实现哨兵模式的配置其实很麻烦的
Redis缓存穿透和雪崩
缓存穿透(查不到)
大量访问缓存层没有的东西,频繁的访问数据库,导致服务器瘫痪。
解决方案
布隆过滤器:对所有可能查询的参数以Hash形式存储,在控制层先校验,不符合则丢弃
缓存空对象
缓存击穿(量太大,缓存过期!)
大量访问集中在一个点上,频繁的访问,导致服务器崩溃。
举例:微博热点,缓存了60秒,60秒之后过期了,61秒的时候,1秒中的时间,大量的访问冲击到数据库。
解决方案:
热点数据永不过期
加护斥锁,限制访问数据库
缓存雪崩
Redis宕机! 停电
解决方案:
Redis高可用,多设几台,异地多活
限流降级
数据预热
视频学习资料:B站 狂神说