导读
前面文章【一、深入理解redis之需要掌握的知识点 】中,我们对redis需要学习的内容框架进行了一个梳理。
【二、redis中String和List两种数据类型和应用场景 】、【二、redis中Hash、Set、SortedSet应用场景 】两篇文章我们对redis中String、List、Hash、Set、SortedSet五种数据类型做了一下讲解,并且对他们各自的应用场景进行了介绍。
【三、redis数据存储之跳跃表(SKIP LIST) 】深入学习了支撑SortedSet排序背后的数据结构,跳跃表;
【四、redis持久化之RDB与AOF 】学习了redis中的两种持久化策略:RDB(快照)和AOF(追加日志);
本篇文章我们将要学习redis集群的进化过程,包括解决单点故障问题和性能瓶颈问题等。
如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒
单点故障
主从复制-集群
一变多|多实例|全量同步
1.一个master可以配备一个或多个slave服务器。
2.为了保证slave可以在任何时候都可以保证与master之间数据一致,redis存在以下几种机制:
①master与slave连接正常时,master会发送一连串的命令流来保证对slave的更新,以便于将自身数据集的改变复制给slave:包括客户端的写入,key的过期或者被逐出等。
②当master与slave之间的连接断开后,slave在重新连接后会努力尝试只获取网络断开期间丢失的命令流。
③当slave无法进行部分重同步时,slave会请求全量同步。全量同步就是发送快照+发送快照期间的命令流。
3.redis主从同步的方式默认为异步。
4.可以使用复制来避免 master 将全部数据集写入磁盘造成的开销:一种典型的技术是配置你的 master Redis.conf 以避免对磁盘进行持久化,然后连接一个 slave ,其配置为不定期保存或是启用 AOF。但是,这个设置必须小心处理,因为重新启动的 master 程序将从一个空数据集开始:如果一个 slave 试图与它同步,那么这个 slave 也会被清空。
5.如果 master 使用复制功能的同时未配置持久化,那么自动重启进程这项应该被禁用。
6.无需磁盘参与的复制:Redis 2.8.18 是第一个支持无磁盘复制的版本。在此设置中,子进程直接发送 RDB 文件给 slave,无需使用磁盘作为中间储存介质。
7.在实际使用中要把redis的keys 命令和 FLUSHALL等命令都禁用掉
。
配置方式:
1.主从复制
配置基本的 Redis 复制功能是很简单的:只需要将以下内容加进 slave 的配置文件:
slaveof 192.168.1.1 6379
2.只读性质的 slave
自从 Redis 2.6 之后, slave 支持只读模式且默认开启
。redis.conf 文件中的 slave-read-only
变量控制这个行为,且可以在运行时使用 CONFIG SET 来随时开启或者关闭。只读模式下的 slave 将会拒绝所有写入命令,因此实践中不可能由于某种出错而将数据写入 slave 。
3.设置一个 slave 对 master 进行验证
如果你的 master 通过 requirepass 设置了密码,则在所有同步操作中配置 slave 使用该密码是很简单的。
要在正在运行的实例上执行此操作,请使用 redis-cli 并输入:config set masterauth <password>
要永久设置的话,请将其添加到您的配置文件中:
masterauth <password>
性能瓶颈压力大
分片/分区-集群
一变多|多实例|分而治之
详见后续文章(redis缓存之AKF问题解决方案
)
1.客户端分区
2.代理分区
3.redis分区-redis集群
AKF(X-Y-Z)问题:
1.X轴:主从复制的全量同步解决了单点故障问题,也就是AKF理论中的X轴。
2.Y轴:按照不同的业务使用不同的redis服务。订单、用户、支付等都使用不同的服务。也就是AKF理论中的Y轴。
3.Z轴:使用分区概念解决单机及大数据量的性能瓶颈
Data-数据-压测
压测:
使用redis自带的redis-benchmark
命令可以进行压测
Redis-benchmark使用方式
-h host
-p port
-c clients连接数-默认50线程
-n requests 请求数量-默认10万连接
-d size SET/GET数据大小-默认3bytes
-q 静默模式,只显示结果
-t 要压测的命令
本机压测示例:
redis-benchmark -c5000 -n100000
-q -t set
单机最大端口数量65535
单用户文件描述符默认限制 1024
可使用ulimit -n
命令查看|ulimit -SHn 100000
单机压测结果:
Redis-benchmark -c 100 -n1000000 -q -tset
是在使用默认SYNC同步时并发是10万最优,开启最高安全的SYNC同步时并发是3.5万最优。
局域网内压测结果:并发3.5万最优。
外网压测结果:并发1.3万最优。
得出结论:网络带宽、磁盘IO、网卡(至少千兆)速度等对QPS的影响很大
。
如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒
后续redis中将要讲解的内容梳理
往期文章
Redis
二、redis中String和List两种数据类型和应用场景
二、redis中基础数据类型Hash、Set、SortedSet及其应用场景
Java集合
三、JDK1.7和1.8HashMap数据结构及源码分析-续
Java-IO体系
七、IDEA的maven项目的netty包的导入(其他jar同)
十一、JAVA中ServerSocket调用Linux系统内核
十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型
十五、使用Selector(多路复用器)实现Netty中Reactor主从模型
十七、IO进化过程之EVENT(EPOLL-事件驱动异步模型)
如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒