1、redis如何承载高并发
需要明确的一点:redis只是解决高并发架构里面的一个环节,而且是读高并发,如果是写高并发的话,可能需要考虑其他的异步,或者消息队列方式。
redis的瓶颈在哪里?
单机模式,一般来说QPS从一万到几万不等,当然机器性能好,配置牛,那可能会更高。一般来说读写分离适合写请求比较少,大概一秒几千,大量的请求都是读请求。读请求大概一秒钟十几万,几十万。
一直在说读写分离,但是读写分离是怎么做的呢?
一般是一主多从的架构,主redis负责写,并且敬数据复制同步到其他的slave节点上,读操作则从slave节点读,这样做的好处是可以水平扩容,如果每一个slave可以承载5w的QPS,那么三台slave则可以承受15w的QPS(理论上)。
2、redis replication基本原理
Redis replication
是一种 master-slave
模式的复制机制,使得 slave 节点可以成为与 master 节点完全相同的副本。一个master可以有多个slave,但是slave只能有一个master,而且数据只能从master流向slave,不可以从slave流到master,这是单向过程。redis replication
的核心机制,
- (1)当master接收到写请求的时候,写完成之后会立马返回客户端,表示写已经完成了,同时redis采用
异步方式
复制数据到slave节点。不会阻塞写写请求。不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量. - (2)slave node也可以连接其他的slave node
- (3)slave node做复制的时候,是不会block master node的正常工作的
- (4)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了,但是这个时间极短。
- (5)slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量。
3、有了主从架构就不用做持久化或者备份了么?
一般不是的。
如果采用了主从架构的话,一般是必须开启master的持久化的,不建议用slave node作为master node的数据热备,因为那样的话,如果你关掉master的持久化,可能在master宕机重启的时候数据是空的,然后可能一经过复制,空数据被复制到slave中,salve node数据也丢了。
虽然slave node可以自动接管master node,但是也可能sentinal
还没有检测到master failure,master node就自动重启了,还是可能导致上面的所有slave node数据清空故障,所以不要冒险。当然硬要关闭master的持久化的话,应禁用实例的自动重启。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
技术之路不在一时,山高水长,纵使缓慢,驰而不息。