一般Redis都是在3台机器上进行部署来实现高可用,
因为课程中选择了软件杯中缓存高可用这个主题,故在2台机器上做了一番折腾,花费了不少时间,也对Redis有了不少了解。
当然我所做的了解并不是真实开发中遇到的,只是自己做的小测试。
一、性能
Redis的性能影响最大因素在于CPU
峰值和网络
,首要因素是网络,只有在千兆网络环境下才会近乎不受网络影响。
Redis性能的确非常强,我列举一下我在不同环境下所做的测试:
CPU | Qps |
---|---|
i5 8250u(笔记本) | 11w |
i5 8250u + docker | 9w |
i7 8550u(笔记本) | 12w |
ecs.n4.small (阿里云学生机) | 4.6w |
MT 8176(安卓平板) | 2w |
ARM Cortex-A53 ARMv8 (树莓派3b) | 0.88w |
单机和主从部署得到的qps差别不大,在个别操作(如LANGE)性能只有如上数据的1/4;而当采用集群部署时,所有操作的Qps及其稳定,单台实例所有Qps都能达到最高的90%。当然根据真实生产环境来选择方案是最合理的。
看到网上许多人都在问哪个版本性能
更高以及更稳定
,我先后使用了5.05
、3.28
、4.00
三个版本进行测试。
在性能
上大体相近,相差很小:5.05>3.28>4.00
5.05毕竟是最新的,对一些算法做了不少优化。
但是在集群部署上,我个人认为还是5之前的比较稳定,通过ruby脚本进行部署,5版本开始虽然用c语言改写了,但是部署总出现一些奇怪的问题(或许我比较倒霉),上线集群的话还是建议redis5之前的。
二、优化
一般来说优化指的是网络和内存方面的优化。
网络方面通过一些工具命令来降低延迟;
内存方面要控制好利用率以及内存分配策略:
#!/bin/bash
echo "内存分配优化"
#以下为永久生效
#echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
echo "关闭THP"
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "tcp优化"
sysctl -w net.ipv4.tcp_timestamps=1
sysctl net.core.somaxconn=65535
三、架构
常用的三种架构:
架构 | 适合场景 |
---|---|
主从+哨兵 | 至少3台机器、高可用 |
集群 | 至少2台机器、高并发、高可用 |
主从+哨兵+VIP漂移 | 至少两台设备、高可用 |
在软件杯要求2台机器的条件下,符合的方案显然是“集群”和“主从+哨兵+VIP漂移”。