Redis性能测试及架构简述

服务器

浏览数:204

2019-10-13

一般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.053.284.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漂移”。

作者:Dakini_Wind