Redis如何做到高性能

49 篇文章 2 订阅

1、通过主从架构实现读写分离

单机redis的QPS,也就是每秒可以处理多少个请求,最多也就几万。如果你的机器配置特别高,性能特别好,并且操作处理没什么复杂性,才可能会更高一些。
那么这个时候QPS想要达到10万+,可以通过主从架构+读写分离来实现QPS的增加,redis master主机负责处理写的请求,其他主机负责读数据的请求,这样一来,一台主机可以处理5万请求,那2台主机不就可以处理10万请求了,想要20万也可以,再增加两台主机就是了。
如图:
在这里插入图片描述

2、Redis replication的基本原理

既然将redis分了主从架构,那么肯定要将master的数据复制进slave主机的。如果master数据被改变了,什么时候把新的数据复制到从机呢。这个操作是异步的,当master接收到写的请求时,写成功之后会直接向客户端返回成功的回执,然后会向slave主机进行数据复制和更新。

master有一个run_id参数,同一个master无论是重启还是换ip这个值都不会变,slave也会根据这个值来判断直接是否复制过这个master的数据。如果run_id变化了,那就会触发一次全量复制

并且数据复制的时候master不会将对应数据block,slave也不会block,只有复制完成,slave主机将旧数据删除时才会停止旧数据的查询

如果redis使用了主从架构,建议master主机必须开启数据持久化,因为万一master node宕机了,重启之后readis可能会认为master中的数据真的为空,在把这个空数据同步给slave的话,那数据可就100%丢失了。

master虽然说是由备份方案的,宕机之后会从salve中选择一份备份数据来恢复;还有一种是由slave接管master,但这也可能会出现slave还没来得及升级为master,原来的master已经自动重启了,又认为自己的数据是空,将空数据同步到salve,那就全完了

3、主从架构的核心原理

1.主从架构的核心原理
当启动一个slave的时候,会发送一条命令PSYNC通知master node。如果这是slave重新连接master主机,那么仅仅会复制新的数据,如果是第一次连接mater node,那么会触发一次full resynchronization。这时候master会启动一个线程生成一份全量的数据快照文件RDB,还会将接收到的命令存在缓存中。

2.主从复制断点续传
从redis2.8开始,就支持主从复制的断电续传,如果主从复制过程中网络断掉了,那重新连接的时候还是会从断电处开始传,不会从新传。
master node会在本地有一个backlog日志,master和slave复制的时候会不断的记录数据的replica offset,保存在backlog中,如果断掉了,还是会从当前记录的replica offset开始传的。

3.无磁盘化复制
master在内存中直接创建RDB,不会再落进磁盘了。

4.过期key处理
slave不会进行过期key的处理,只有等master处理了过期key之后,将消息同步给slave

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木小同

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值