云服务器内容精选

  • D CS Memcached(已停售) DCS Memcached已停售,建议使用Redis实例。 Memcached是一种内存Key-Value缓存系统,它支持简单字符串数据的存取,通常作为后端数据库内容缓存,以提升web的应用性能,降低对后端数据库的性能依赖,具体了解请参考Memcached(已停售)典型应用场景。 DCS全面兼容Memcached协议并增强实现了双机热备和数据持久化。 表3 DCS Memcached灵活的实例配置 实例类型 提供单机、主备两种类型,分别适配不同的业务场景。 单机:适用于应用对可靠性要求不高、仅需要缓存临时数据的业务场景。单机实例支持读写高并发,但不做持久化,实例重启后原有缓存数据不会加载。 主备:包含一个主节点和一个备节点,主备节点的数据通过实时复制保持一致,备节点对用户不可见且不能直接读写数据,当主节点故障后,备节点自动升级为主节点。 内存规格 单机和主备实例均提供2G、4G、8G、16G、32G、64G共6种内存规格。 高可用与容灾 主备实例提供Region内的跨可用区部署,实现实例内部节点间的电力、网络层面物理隔离。 有关开源Memcached技术细节,您可以访问Memcached官方网站https://memcached.org/。
  • DCS Redis DCS Redis当前支持的Redis版本为Redis 4.0、Redis 5.0、Redis 6.0、Redis 7.0。 DCS Redis 3.0已暂停售卖,建议使用Redis 4.0及以上版本。 Redis 7.0目前为公测阶段,仅白名单开放,如有需要请联系客服。 Redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存、事件发布或订阅、高速队列等典型应用场景。Redis使用ANSI C语言编写,提供字符串(String)、哈希(Hash)、列表(List)、集合结构(Set、 Sorted_Set )、流(Stream)等数据类型的直接存取。数据读写基于内存,同时可持久化到磁盘。 DCS Redis拥有灵活的实例配置供您选择: 华为云DCS Redis 4.0/5.0/6.0/7.0基础版。 表1 DCS Redis 4.0/5.0/6.0/7.0基础版 实例类型 提供单机、主备、Proxy集群、Cluster集群、读写分离类型,分别适配不同的业务场景。 单机:适用于应用对可靠性要求不高、仅需要缓存临时数据的业务场景。单机实例支持读写高并发,但不做持久化,实例重启或关闭后原有缓存数据不会加载。 主备:包含一个主节点,一个或多个备节点,主备节点的数据通过实时复制保持一致,当主节点故障后,备节点自动升级为主节点。同时用户可通过读写分离技术,在主节点上写,从备节点读,从而提升缓存的整体读写性能。 Proxy集群:在Cluster集群的基础上,增加挂载Proxy节点和ELB节点,通过ELB节点实现负载均衡,将不同请求分发到Proxy节点,实现客户端高并发请求。每个Cluster集群分片默认是一个双副本的主备实例,当主节点故障后,同一分片中的备节点会升级为主节点来继续提供服务。 Cluster集群:通过分片化分区来增加缓存的容量和并发连接数,每个分片包含一个主节点和0到多个备节点,分片本身对外不可见。分片中主节点故障后,同一分片中备节点会升级为主节点来继续提供服务。用户可通过读写分离技术,在主节点上写,从备节点读,从而提升缓存的整体读写能力。 读写分离:在主备实例的基础上,增加挂载Proxy节点和ELB节点,通过ELB节点实现负载均衡,将不同请求分发到Proxy节点,Proxy节点识别用户读写请求,将请求发送到主节点或备节点,从而实现读写分离。 规格 Redis提供128MB~1024G的多种规格。 兼容开源Redis版本 DCS提供不同的实例版本,分别兼容开源Redis的4.0、5.0、6.0、7.0。 底层架构 在物理机上容器化部署,Redis 4.0、5.0单节点QPS达10万/秒,Redis 6.0、7.0基础版单机、主备实例QPS分别达15万/秒和17万/秒。 高可用与容灾 除单机实例外,其他类型的实例都提供Region内的跨可用区部署,实现实例内部节点间的电力、网络层面物理隔离。 有关开源Redis技术细节,您可以访问Redis官方网站https://redis.io/了解。 华为云DCS Redis 6.0企业版。 华为云DCS 企业版,为华为云全自研的版本,由传统的master-worker线程模型升级为master-N*worker多线程模型,对比传统缓存软件模型,整体性能N倍提升。DCS 企业版100%兼容Redis协议、模块和脚本,如脚本和事务的原子性等,在相同的硬件上,企业版的QPS约是Redis的两倍,且延迟可降低约60%。 多线程高性能版,适用于对单节点性能有超高要求的用户,比如互联网热点事件、大咖直播等高并发访问场景。Redis 6.0之前版本,通常受到慢请求单线程处理的制约,任何一个慢请求的出现都会带来其它用户请求的延时。Redis多线程高性能版对从IO到后端事件处理的全流程,进行了多线程并行优化;通过公平自旋锁实现多线程高效访问缓存数据;通过优化Key逐出算法,提升逐出效率1倍以上;通过支持SubKey过期提高了大Key读写性能。 表2 DCS Redis 6.0企业版 实例类型 Redis 6.0企业版分为高性能型和企业版存储型,目前只支持主备实例类型。(企业版存储型由内存+SSD磁盘组成。) 主备实例包含一个主节点,一个备节点,主备节点的数据通过实时复制保持一致,当主节点故障后,备节点自动升级为主节点。同时用户可通过读写分离技术,在主节点上写,从备节点读,从而提升缓存的整体读写性能。 规格 Redis提供8GB、16GB、32GB、64GB多种规格。 兼容开源版本 DCS企业版完全兼容开源Redis 6。 底层架构 基于虚拟机部署,单节点QPS达40万/秒。 高可用与容灾 除单机实例外,其他类型的实例都提供Region内的跨可用区部署,实现实例内部节点间的电力、网络层面物理隔离。
  • 企业版高性能型 Redis 6.0企业版高性能型实例目前只支持主备实例类型,CPU类型为X86结构。 表6 Redis 6.0企业版高性能型实例产品规格 内存规格 (GB) 实例可使用内存 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 8 8 10,000/50,000 1536/1536 400,000 redis.ha.xu1.large.enthp.8 16 16 10,000/50,000 1536/1536 400,000 redis.ha.xu1.large.enthp.16 32 32 10,000/50,000 1536/1536 400,000 redis.ha.xu1.large.enthp.32 64 64 10,000/50,000 1536/1536 400,000 redis.ha.xu1.large.enthp.64
  • 企业版存储型 Redis 6.0企业版存储型实例目前只支持主备实例类型,CPU类型为X86结构。 企业版存储型由内存和SSD磁盘组成,使用内存缓存热数据,全量数据存储在SSD磁盘。下表中的“最大存储容量”即磁盘容量。 表7 Redis 6.0企业版存储型实例产品规格 内存规格 (GB) 最大存储容量 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 8 64 10000/50000 768/768 70,000 redis.ha.xu1.large.entst.8 16 128 10000/50000 768/768 70,000 redis.ha.xu1.large.entst.16 32 256 10000/50000 768/768 70,000 redis.ha.xu1.large.entst.32
  • 基础版主备实例 主备实例默认为2副本(包含1个主节点和1个备节点),支持设置副本数。 同一个内存规格,x86主备实例、Arm主备实例、主备不同副本数实例有如下差异: 可使用内存、连接数上限、基准/最大带宽、QPS:都一样。 产品规格编码(实例规格名称):表2中仅列出了默认副本数为2的实例规格名称,如果是其他副本个数,名称中相应修改副本数量,例如,8G规格的x86架构主备实例,主备2副本的名称为redis.ha.xu1.large.r2.8,3副本为redis.ha.xu1.large.r3.8,以此类推。 占用IP个数:占用的IP个数=主节点个数*副本个数。例如: 主备2副本实例,占用IP个数=1*2=2; 主备3副本实例,占用IP个数=1*3=3。 表2 Redis 6.0/7.0基础版主备实例产品规格 内存规格 (GB) 实例可使用内存 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 0.125 0.125 10,000/10,000 40/40 80,000 x86:redis.ha.xu1.tiny.r2.128 Arm:redis.ha.au1.tiny.r2.128 0.25 0.25 10,000/10,000 80/80 80,000 x86:redis.ha.xu1.tiny.r2.256 Arm:redis.ha.au1.tiny.r2.256 0.5 0.5 10,000/10,000 80/80 80,000 x86:redis.ha.xu1.tiny.r2.512 Arm:redis.ha.au1.tiny.r2.512 1 1 10,000/50,000 80/80 80,000 x86:redis.ha.xu1.large.r2.1 Arm:redis.ha.au1.large.r2.1 2 2 10,000/50,000 128/128 80,000 x86:redis.ha.xu1.large.r2.2 Arm:redis.ha.au1.large.r2.2 4 4 10,000/50,000 192/192 80,000 x86:redis.ha.xu1.large.r2.4 Arm:redis.ha.au1.large.r2.4 8 8 10,000/50,000 192/192 100,000 x86:redis.ha.xu1.large.r2.8 Arm:redis.ha.au1.large.r2.8 16 16 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.16 Arm:redis.ha.au1.large.r2.16 24 24 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.24 Arm:redis.ha.au1.large.r2.24 32 32 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.32 Arm:redis.ha.au1.large.r2.32 48 48 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.48 Arm:redis.ha.au1.large.r2.48 64 64 10,000/50,000 384/384 100,000 x86:redis.ha.xu1.large.r2.64 Arm:redis.ha.au1.large.r2.64
  • 基础版单机实例 表1 Redis 6.0/7.0基础版单机实例产品规格 内存规格 (GB) 实例可使用内存 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 0.125 0.125 10,000/10,000 40/40 80,000 x86:redis.single.xu1.tiny.128 Arm:redis.single.au1.tiny.128 0.25 0.25 10,000/10,000 80/80 80,000 x86:redis.single.xu1.tiny.256 Arm:redis.single.au1.tiny.256 0.5 0.5 10,000/10,000 80/80 80,000 x86:redis.single.xu1.tiny.512 Arm:redis.single.au1.tiny.512 1 1 10,000/50,000 80/80 80,000 x86:redis.single.xu1.large.1 Arm:redis.single.au1.large.1 2 2 10,000/50,000 128/128 80,000 x86:redis.single.xu1.large.2 Arm:redis.single.au1.large.2 4 4 10,000/50,000 192/192 80,000 x86:redis.single.xu1.large.4 Arm:redis.single.au1.large.4 8 8 10,000/50,000 192/192 100,000 x86:redis.single.xu1.large.8 Arm:redis.single.au1.large.8 16 16 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.16 Arm:redis.single.au1.large.16 24 24 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.24 Arm:redis.single.au1.large.24 32 32 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.32 Arm:redis.single.au1.large.32 48 48 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.48 Arm:redis.single.au1.large.48 64 64 10,000/50,000 384/384 100,000 x86:redis.single.xu1.large.64 Arm:redis.single.au1.large.64
  • 主备实例 主备实例默认为2副本(包含1个主节点和1个备节点),支持设置副本数。 同一个内存规格,x86主备实例、Arm主备实例、主备不同副本数实例有如下差异: 可使用内存、连接数上限、基准/最大带宽、QPS:都一样。 产品规格编码(实例规格名称):表2中仅列出了默认副本数为2的实例规格名称,如果是其他副本个数,名称中相应修改副本数量,例如,8G规格的x86架构主备实例,主备2副本的名称为redis.ha.xu1.large.r2.8,3副本为redis.ha.xu1.large.r3.8,以此类推。 占用IP个数:占用的IP个数=主节点个数*副本个数。例如: 主备2副本实例,占用IP个数=1*2=2; 主备3副本实例,占用IP个数=1*3=3。 表2 Redis 4.0和Redis 5.0主备实例产品规格 内存规格 (GB) 实例可使用内存 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 0.125 0.125 10,000/10,000 40/40 80,000 x86:redis.ha.xu1.tiny.r2.128 Arm:redis.ha.au1.tiny.r2.128 0.25 0.25 10,000/10,000 80/80 80,000 x86:redis.ha.xu1.tiny.r2.256 Arm:redis.ha.au1.tiny.r2.256 0.5 0.5 10,000/10,000 80/80 80,000 x86:redis.ha.xu1.tiny.r2.512 Arm:redis.ha.au1.tiny.r2.512 1 1 10,000/50,000 80/80 80,000 x86:redis.ha.xu1.large.r2.1 Arm:redis.ha.au1.large.r2.1 2 2 10,000/50,000 128/128 80,000 x86:redis.ha.xu1.large.r2.2 Arm:redis.ha.au1.large.r2.2 4 4 10,000/50,000 192/192 80,000 x86:redis.ha.xu1.large.r2.4 Arm:redis.ha.au1.large.r2.4 8 8 10,000/50,000 192/192 100,000 x86:redis.ha.xu1.large.r2.8 Arm:redis.ha.au1.large.r2.8 16 16 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.16 Arm:redis.ha.au1.large.r2.16 24 24 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.24 Arm:redis.ha.au1.large.r2.24 32 32 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.32 Arm:redis.ha.au1.large.r2.32 48 48 10,000/50,000 256/256 100,000 x86:redis.ha.xu1.large.r2.48 Arm:redis.ha.au1.large.r2.48 64 64 10,000/50,000 384/384 100,000 x86:redis.ha.xu1.large.r2.64 Arm:redis.ha.au1.large.r2.64
  • 单机实例 表1 Redis 4.0和Redis 5.0单机实例产品规格 内存规格 (GB) 实例可使用内存 (GB) 最大连接数(默认/最大可配) (个) 基准/最大带宽 (Mbit/s) 参考性能 (QPS) 产品规格编码(对应API的spec_code) 0.125 0.125 10,000/10,000 40/40 80,000 x86:redis.single.xu1.tiny.128 Arm:redis.single.au1.tiny.128 0.25 0.25 10,000/10,000 80/80 80,000 x86:redis.single.xu1.tiny.256 Arm:redis.single.au1.tiny.256 0.5 0.5 10,000/10,000 80/80 80,000 x86:redis.single.xu1.tiny.512 Arm:redis.single.au1.tiny.512 1 1 10,000/50,000 80/80 80,000 x86:redis.single.xu1.large.1 Arm:redis.single.au1.large.1 2 2 10,000/50,000 128/128 80,000 x86:redis.single.xu1.large.2 Arm:redis.single.au1.large.2 4 4 10,000/50,000 192/192 80,000 x86:redis.single.xu1.large.4 Arm:redis.single.au1.large.4 8 8 10,000/50,000 192/192 100,000 x86:redis.single.xu1.large.8 Arm:redis.single.au1.large.8 16 16 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.16 Arm:redis.single.au1.large.16 24 24 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.24 Arm:redis.single.au1.large.24 32 32 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.32 Arm:redis.single.au1.large.32 48 48 10,000/50,000 256/256 100,000 x86:redis.single.xu1.large.48 Arm:redis.single.au1.large.48 64 64 10,000/50,000 384/384 100,000 x86:redis.single.xu1.large.64 Arm:redis.single.au1.large.64
  • Redis版本差异 DCS在创建实例时,Redis可选择“版本号”、“实例类型”。 DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0及以上版本。 Redis 7.0目前为公测阶段,仅白名单开放,如有需要请联系客服。 由于Redis不同版本的底层架构不一样,在创建Redis实例时,确定Redis版本后,将不能修改,如Redis 4.0暂不支持升级到Redis 5.0或者Redis 6.0。如果需要由低版本升级到高版本,建议重新购买高版本实例,然后进行数据迁移。 版本号 Redis版本号有3.0,4.0,5.0,6.0,7.0,它们的区别如表1。更多Redis特性,请参考Redis4.0新特性介绍、Redis5.0新特性介绍和Redis6.0新特性介绍。 表1 不同版本支持的特性、性能差异说明 比较项 Redis 3.0(已停售) Redis 4.0 & Redis 5.0 Redis 6.0 & Redis 7.0 兼容开源版本 DCS Redis 3.0兼容开源Redis 3.x,具体请参考如何查询Redis实例的原生版本 DCS Redis 4.0、Redis 5.0分别兼容开源Redis 4.x、Redis 5.x,具体请参考如何查询Redis实例的原生版本 DCS Redis 6.0、Redis 7.0分别兼容开源Redis 6.x、Redis 7.x,具体请参考如何查询Redis实例的原生版本 实例部署模式 采用虚拟机部署 在物理机上容器化部署 基础版在物理机上容器化部署 企业版采用虚拟机部署 创建实例耗时 3~15分钟,集群约10~30分钟 约8秒 基础版:约8秒 企业版:5~15分钟 QPS 单节点约10万QPS 具体每种实例规格对应的QPS请参考Redis 3.0实例(已停售) 单节点约10万QPS 具体每种实例规格对应的QPS请参考Redis 4.0/5.0实例 基础版单节点约10万QPS 企业版单节点约40万QPS 具体每种实例规格对应的QPS请参考Redis 6.0/7.0实例 域名 连接 支持VPC内使用域名连接 支持VPC内使用域名连接 支持VPC内使用域名连接 可视化数据管理 不支持 提供Web CLI访问Redis,管理数据 提供Web CLI访问Redis,管理数据 实例类型 支持单机、主备、Proxy集群 支持单机、主备、读写分离、Proxy集群、Cluster集群 Redis 6.0基础版:单机、主备、读写分离、Proxy集群、Cluster集群 Redis 6.0企业版:主备 Redis 7.0:单机、主备、Cluster集群 扩容/缩容 支持在线扩容和缩容 支持在线扩容和缩容 支持在线扩容和缩容 备份恢复 主备和Proxy集群实例支持 主备、Proxy集群、Cluster集群和读写分离实例支持 主备、Proxy集群、Cluster集群和读写分离实例支持 实例类型 Redis实例类型分为单机、主备、Proxy集群、Cluster集群和读写分离,它们的架构与应用场景,请参考DCS实例类型。 父主题: 产品规格差异
  • Redis企业版与基础版差异 DCS企业版为全自研的版本,100%兼容开源Redis软件,由传统的单master-单worker线程模型升级为master-N*worker线程模型,每个worker线程都可承担端口监听(监听建立网络链接的请求)、accept请求(接纳并建立网络链接)、读取数据(从网络链接如socket读写数据)和解析协议(解析并处理Redis命令等),依托于服务器计算能力的提升,整体性能N倍提升。 表1 企业版和基础版的能力对比 对比项 DCS基础版 DCS企业版 兼容开源Redis版本 兼容开源Redis 4.0/5.0/6.0/7.0,单线程 兼容开源Redis 6.0,多线程 性能 单分片QPS达10万/秒,最大时延1ms 企业版高性能型:单分片QPS达40万/秒 企业版存储型:单分片QPS达7万/秒 最大时延1ms 实例规格 提供单机、主备、集群、读写分离多种实例类型: 单机、主备实例可选择128MB-64G缓存容量 读写分离实例可选择8G-32G多种缓存容量 集群实例最大规格达2048GB 目前仅提供主备实例类型,可选择企业版高性能型和企业版存储型: 企业版高性能型可选择8GB-64GB内存容量 企业版存储型可选择8GB-32GB内存容量,最大存储容量(SSD磁盘容量)可达256GB 更多企业版高性能型和存储型的差异请参考表2。 数据安全 支持细粒度授权和IP白名单 除单机实例外,均支持持久化和数据备份 支持跨AZ容灾 支持异常自动切换 支持一键在线扩容和变更缓存类型 支持细粒度授权和安全组配置 支持持久化和数据备份 支持跨AZ容灾 支持异常自动切换 支持一键在线扩容 表2 企业版高性能型和存储型的差异 对比项 企业版高性能型 企业版存储型 QPS 单分片QPS达40万/秒,性能高于存储型。 单分片QPS达7万/秒。 存储方式 不支持SSD存储,纯内存。 使用aof的方式做数据持久化。 内存+SSD磁盘。 使用内存缓存热数据,全量数据存储在SSD磁盘中。 支持的备份文件格式 aof、rdb。 rdb。 父主题: 产品规格差异
  • 约束与限制 只有当实例处于“运行中”状态,才能执行此操作。 只有Redis 4.0及以上版本实例支持该操作,Redis 3.0不支持该功能。 在Web CLI中,部分命令被禁用,详情请参考Web CLI中支持和禁用命令。 请勿通过Web CLI输入敏感信息,以免敏感信息泄露。 当前在Web CLI下所有命令参数暂不支持中文且key和value不支持空格。 当value值为空时,执行get命令返回nil。
  • DCS实例配置建议 连接池化 因lettuce底层采用基于netty的NIO模式,和redis server进行通信,不同于jedis的BIO模式。底层采用长连接 + 队列的组合模式,借助TCP顺序发、顺序收的特性,来实现同时处理多请求发送和多响应接收,单条连接可支撑的QPS在3K~5K不等,线上系统建议不要超过3K。lettuce本身不支持池化,且在springboot中默认不开启池化,如需开启池化,需通过手动引入commons-pool2组件,并关闭LettuceConnectionFactory.shareNativeConnection(共享连接)来实现池化。 因每条lettuce连接默认需要配置两个线程池-I/O thread pools、computation thread pool,用于支撑IO事件读取和异步event处理,如配置成连接池形式使用,每个连接都将会创建两个线程池,对内存资源的占用偏高。鉴于lettuce的底层模型实现,及单连接突出的处理能力,不建议通过池化的方式使用lettuce。 拓扑刷新 在连接cluster类型实例中,lettuce会在初始化时,向配置的节点列表随机发送cluster nodes来获取集群slot的分布信息。如后续cluster扩/缩容、主备切换等,会导致集群拓扑结构发生变化,lettuce默认是不感知的,需手动开启主动感知拓扑结构变化,如下: 基于application.properties配置 # 开启自适应拓扑刷新 spring.redis.lettuce.cluster.refresh.adaptive=true # 开启每10s定时刷新拓扑结构 spring.redis.lettuce.cluster.refresh.period=10S 基于API配置 ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() .enableAllAdaptiveRefreshTriggers() .enablePeriodicRefresh(Duration.ofMillis(redisClusterTopologyRefreshPeriodMillis)) .build(); ClusterClientOptions clientOptions = ClusterClientOptions.builder() ... ... .topologyRefreshOptions(topologyRefreshOptions) .build(); 爆炸半径 因lettuce底层采用的是单长连接 + 请求队列的组合模式,一旦遇到网络抖动/闪断,或连接失活,将影响所有请求,尤其是在连接失活场景中,将尝试tcp重传,直至重传超时关闭连接,待连接重建后才能恢复。在重传期间请求队列会不断堆积请求,上层业务非常容易出现批量超时,甚至在部分操作系统内核中的重传超时配置过长,致使业务系统长时间处于不可用状态。因此,不推荐使用lettuce组件,建议用jedis组件替换。
  • SSL连接配置(可选配置) 当实例开启了SSL,通过SSL连接实例时,请使用以下内容替换基于Bean方式配置中的LettuceClientConfiguration构造方法clientConfiguration()。Redis实例支持SSL的情况请参考配置Redis SSL 数据加密 传输。 单机、主备、读写分离、Proxy集群实例配置 @Bean public LettuceClientConfiguration clientConfiguration() { SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofMillis(redisConnectTimeout)).build(); SslOptions sslOptions = SslOptions.builder() .trustManager(new File(certificationPath)) .build(); ClientOptions clientOptions = ClientOptions.builder() .sslOptions(sslOptions) .autoReconnect(true) .pingBeforeActivateConnection(true) .cancelCommandsOnReconnectFailure(false) .disconnectedBehavior(ClientOptions.DisconnectedBehavior.ACCEPT_COMMANDS) .socketOptions(socketOptions) .build(); LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder() .commandTimeout(Duration.ofMillis(redisReadTimeout)) .readFrom(ReadFrom.MASTER) .clientOptions(clientOptions) .useSsl() .build(); return clientConfiguration; } Cluster集群实例配置 @Bean public LettuceClientConfiguration clientConfiguration() { SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofMillis(redisConnectTimeout)).build(); SslOptions sslOptions = SslOptions.builder() .trustManager(new File(certificationPath)) .build(); ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() .enableAllAdaptiveRefreshTriggers() .enablePeriodicRefresh(Duration.ofMillis(redisClusterTopologyRefreshPeriodMillis)) .build(); ClusterClientOptions clientOptions = ClusterClientOptions.builder() .sslOptions(sslOptions) .autoReconnect(true) .pingBeforeActivateConnection(true) .cancelCommandsOnReconnectFailure(false) .disconnectedBehavior(ClientOptions.DisconnectedBehavior.ACCEPT_COMMANDS) .socketOptions(socketOptions) .topologyRefreshOptions(topologyRefreshOptions) .build(); LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder() .commandTimeout(Duration.ofMillis(redisReadTimeout)) .readFrom(ReadFrom.MASTER) .clientOptions(clientOptions) .useSsl() .build(); return clientConfiguration; }
  • 测试步骤 创建Redis缓存实例。 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。 如果是测试单机或主备实例,创建1台ECS即可。 在每台ECS上安装redis-benchmark。可通过以下两种方式安装Redis-server,安装Redis-server的同时,会同步安装benchmark。 安装方法一: 下载redis客户端,此处以redis-6.0.9版本为例。 wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压客户端压缩包。 tar xzf redis-6.0.9.tar.gz 进入redis-6.0.9的src目录下。 cd redis-6.0.9/src 编译源码。 make 编译完成后,工具一般在redis-x.x.x的src目录下。 查看是否有redis-benchmark可执行文件。 ls 将工具安装到系统中。 make install 安装方法二: 根据ECS的不同的操作系统直接安装Redis-server,下面以ubuntu和CentOS系统为例: ubuntu系统 sudo apt update sudo apt install redis-server CentOS系统 sudo yum install epel-release sudo yum update sudo yum -y install redis 每台ECS上执行测试命令。 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connect_number} -d {datasize} -t {command} 参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。 -h表示实例的域名连接地址或IP地址。 -p表示实例的端口,默认为6379。 -a表示实例的连接密码,免密连接的实例无需输入-a {password}。 -t表示执行具体测试命令合集。例如只测试set命令时,使用-t set;如果要测试ping、get、set命令,则使用 -t ping,set,get,命令间使用“,”分隔。 -c表示客户端连接数。 -d表示单条数据大小,单位Byte。 -n表示测试包数量。 -r表示使用随机key数量。 不断调整客户端连接数,执行4,得到最大的QPS(Query Per Second,表示每秒处理的读写操作数,单位:次/秒)。 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。 如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。 redis-benchmark 测试cluster集群实例时需要加 --cluster 参数,其他实例类型不需要加。 如果想对cluster集群的最大连接数进行性能压测,但是压测到1万连接时程序退出,或者报错 Cannot assign requested address。这说明是测试用的ECS本机性能不足,请先检查自己是否只用了1台ECS进行压测。想要对集群压测,建议准备3台ECS,每台ECS起3个redis-benchmark来测试redis实例的最大连接数。
  • redis-benchmark常用命令举例 单机、主备、读写分离和proxy集群的测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -t {command} cluster集群测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} --cluster -t {command} 测试短连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -k 0 -t {command} 测试空闲连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {pwd} -c {clients} -I