Redis企业版性能增强型(简称性能增强型)适合并发量大、读写热点多,对性能的要求超过云Redis社区版实例的场景。相比云数据库Redis社区版,企业版的性能增强型主要在多线程性能增强和多模块集成方面进行了优化。

购买方式

说明 关于本地盘和云盘版的功能对比,请参见云盘与本地盘功能支持度对比

主要优势

类别 说明
兼容性
  • 100%兼容原生Redis,无需修改业务代码。
性能
  • 采用多线程模型,性能约为同规格社区版实例的3倍,能够突破热点数据高频读写受到的性能限制。
  • 相比原生Redis,高QPS场景下响应时间更低,性能表现更佳。
  • 在大并发场景下运行稳定,可以极大地缓解突发大量请求导致的连接问题,从容应对业务高峰。
  • 全量同步和增量同步在IO线程中进行,提高同步速度。
部署架构
  • 支持标准、集群和读写分离部署架构。
数据结构模块集成
企业级特性

适用场景

适用于视频直播、电商秒杀和在线教育等场景,下面列举了性能增强型在4个典型场景中的应用。

  • 场景1:使用Redis社区版的标准版-双副本实例在秒杀场景中构建缓存,部分热点Key的QPS要求高达20万以上,社区版实例无法满足业务高峰期的需求。

    采用性能增强型(标准架构)实例后,热门商品秒杀过程流畅,未发生性能问题。

  • 场景2:在业务中使用云Redis社区版集群实例,但在使用事务和Lua脚本功能时有一定的限制。

    采用性能增强型实例后,在满足性能需求的同时消除了集群版的命令使用限制。

  • 场景3:自建有一主多备的Redis服务,随着业务中访问量的不断提高,备节点数量也要随之增加,管理维护成本越来越高。

    采用具备一个数据节点五个只读副本的性能增强型(读写分离架构)实例后,可以轻松应对百万级QPS的业务挑战。

  • 场景4:自建有Redis集群来承担线上千万级QPS的业务压力。随着业务的发展,Redis分片数不断增加,管理维护成本居高不下。

    采用性能增强型(集群架构)实例后,集群规模缩到原来的三分之一,管理维护成本大幅降低。

线程模型对比

线程架构 说明
图 1. Redis单线程模型
标准性能Redis实例的单线程模型
Redis社区版和原生Redis采用单线程模型,数据处理流程为:读取请求,解析请求,处理数据,发送响应。其中网络IO和请求解析占用了大部分的资源。
图 2. Redis多线程模型
增强性能Redis实例的多线程模型

性能增强型将Redis服务各阶段的任务进行分离,通过分工明确的多个线程并行处理各阶段任务,达到提高性能的目的。

  • IO线程:负责请求读取、响应发送、命令解析等。
  • Worker线程:负责命令处理、定时器事件等。
  • 辅助线程:负责高可用探测、保活等。

IO线程读取用户的请求并进行解析,之后将解析结果以命令的形式放在队列中发送给Worker线程处理。Worker线程将命令处理完成后生成响应,通过另一条队列发送给IO线程。

Redis性能增强型最多支持4个IO线程并发运行。为了提高线程的并行度,IO线程和Worker线程之间采用无锁队列和管道进行数据交换。

说明
  • 对于通用的类型,例如:string、list、set、hash、zset、 hyperloglog、geo,以及扩展结构都有很好的加速效果。
  • 对于pub、sub、blocking系列API,由于其复制是在worker中完成的,可被加速提升吞吐,性能提升约50%。
  • 由于trasaction、lua script要求串行执行,无加速效果。
说明 区别于Redis社区版6.0的多线程(性能至多提升2倍,且CPU资源消耗高),性能增强型的Real Multi-IO能够将IO加速地更彻底,具备更高的抗连接冲击性,且可以线性地提升吞吐能力。

性能对比

云Redis社区版实例采用与原生Redis相同的单线程模型,每个数据节点支持8万到10万的QPS;Redis性能增强型采用多线程模型,由IO线程、Worker线程和辅助线程共同完成数据处理,单节点性能为社区版实例的3倍左右。下表展示了不同架构下,社区版和企业版(性能增强型)实例的适用场景对比。

架构 实例类型 说明
标准架构 社区版 不适用于单节点QPS要求超过10万的场景。
企业版(性能增强型) 可应用于QPS高于10万的场景。
集群架构 社区版 包含多个数据节点,每个节点的性能与标准版实例相似。当某个节点储存了热度较高的数据并面临大并发量的请求时,该节点中其它数据的读写可能受到影响,形成性能瓶颈。
企业版(性能增强型) 能更好地应对热读写,降低维护成本。
读写分离架构 社区版 有较高的读性能,在读多写少的场景表现良好,但不适用于大并发写入的场景。
企业版(性能增强型) 既有较高的读性能,又能承受大并发写入,适用于写请求多而读请求更多的场景。

数据结构模块集成

云Redis社区版与开源Redis相同,支持String、List、Hash、Set、Sorted Set、Stream等数据类型,能够满足大部分场景下的开发需求,但在一些复杂场景中,原生数据类型无法直接满足某些业务需求,只能使用通过调整应用数据、使用Lua脚本等方式来实现。性能增强型集成多个自研的Redis模块,包括:TairStringTairHashTairGISTairBloomTairDoc,扩展了Redis的适用性,同时降低了复杂场景下业务的开发难度,让您专注于业务创新。

表 1. 新增命令类型及列表
命令类型及列表 说明
CAS和CAD命令 为增强Redis String的功能而开发的命令,可以实现简洁高效的Redis分布式锁
TairString命令 TairString是一种带版本号的String类型数据结构,TairString除包含Key和Value外,还携带了版本(version)信息,可用于乐观锁等场景。除此之外,TairString在Redis String加减功能的基础上支持了边界设置,可以将INCRBY、INCRBYFLOAT的结果限制在一定的范围内,超出范围则提示错误,适用于限流器等场景
TairHash命令 TairHash是一种Hash类型的数据,不但和原有的Redis Hash一样支持丰富的数据接口和高处理性能,还支持为field设置过期时间和版本,简化业务开发流程。通过高效的Active Expire算法,可以在不对响应时间造成明显影响的前提下,更高效的完成对field的超时判断和删除。
TairGIS命令 TairGIS是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令使用1D索引,主要用于点的查询,TairGIS使用2D索引,支持点、线、面的查询,适合判断相交或包含关系,功能更加强大。
TairBloom命令 TairBloom是一种可动态扩容的布隆过滤器,完全兼容RedisBloom模块的命令,具有动态扩容的能力,相对传统实现方式消耗内存更低,可在扩容的同时维持误判率的稳定,适合需要高效判断大量数据是否存在且允许一定误判率的业务场景。
TairDoc命令 TairDoc是一种文档类型的数据结构,支持JSON标准,完全兼容ReJSON模块的命令,同时,TairDoc数据以二进制树的方式存储,支持对JSON中子元素的快速访问。
TairZset命令 TairZset可实现任意维度的double类型的分值排序,提升数据处理效率,且客户端适配简易,无需任何编解码封装,解决原生Sorted Set(也称Zset)只支持1个double类型的分值排序的局限性。

企业级特性

企业级特性 说明
通过数据闪回按时间点恢复数据 开启Redis的数据闪回功能后,Redis最长可将AOF备份数据保留7天,在此期间您随时可以指定一个精确到秒的时间点,系统会基于所选时间点的备份数据创建一个新的实例,实现精确的数据恢复。
代理查询缓存 开启代理查询缓存功能(Proxy Query Cache)后,代理节点会缓存热点Key对应的请求和返回信息,当在有效时间内收到同样的请求时直接返回结果至客户端,无需和后端的数据分片交互。更多信息,请参见通过Proxy Query Cache优化热点Key问题
全球分布式缓存 Redis全球分布式缓存(全球多活)是基于云数据库Redis自研的多活数据库系统,可轻松实现异地多个站点同时对外提供服务的业务场景,助力企业快速复制阿里巴巴异地多活架构。
借助DTS实现双向数据同步 通过数据传输服务DTS(Data Transmission Service)实现Redis企业版实例间的双向数据同步,可应用于异地多活、数据容灾等多种场景,详情请参见Redis企业版实例间的双向同步

云盘与本地盘功能支持度对比

当前云数据库Redis的本地盘实例功能较为完整,云盘版实例为云原生基础架构,集群架构的实例支持 无感扩缩容 ,未来会以云盘版为主要演进方向。详细的功能支持度对比如下表所示,为便于阅读,约定✔️表示支持该功能,❌表示不支持该功能。

关于本地盘和云盘实例的更多信息,请参见本地盘和云盘实例对比

类别 功能 本地盘版 云盘版
标准架构 集群架构 读写分离架构 标准架构 集群架构
管理生命周期 变更实例配置 ✔️ ✔️ ✔️ ✔️

支持无感扩缩容

✔️

支持无感扩缩容

支持自定义分片数(不受固定规格限制)

重启实例 ✔️ ✔️ ✔️ ✔️ ✔️
转包年包月 ✔️ ✔️ ✔️ ❌无按量付费 ❌无按量付费
自动或手动续费 ✔️ ✔️ ✔️ ✔️ ✔️
升级大版本
升级小版本 ✔️ ✔️ ✔️ ✔️ ✔️
释放或退订实例 ✔️ ✔️ ✔️ ✔️ ✔️
实例回收站 ✔️ ✔️ ✔️ ✔️ ✔️
管理网络连接 切换为专有网络VPC ✔️ ✔️ ✔️ ❌无经典网络 ❌无经典网络
更换专有网络VPC或交换机 ✔️ ✔️ ✔️
申请公网连接地址 ✔️ ✔️ ✔️
开通直连访问 ✔️ ✔️ ✔️默认为直连模式,不支持代理模式
修改连接地址或端口 ✔️ ✔️ ✔️ ✔️ ✔️
管理带宽 开启带宽弹性伸缩 ✔️ ✔️ ✔️
手动调整实例带宽 ✔️ ✔️ ✔️
管理高可用 手动执行主备切换 ✔️ ✔️ ✔️
重启或重搭代理节点 ✔️ ✔️
升级代理节点 ✔️ ✔️
管理参数 设置实例参数 ✔️ ✔️ ✔️ ✔️ ✔️
管理标签 新建标签 ✔️ ✔️ ✔️ ✔️ ✔️
根据标签筛选实例 ✔️ ✔️ ✔️ ✔️ ✔️
解绑或删除标签 ✔️ ✔️ ✔️ ✔️ ✔️
其他管理功能 设置可维护时间段 ✔️ ✔️ ✔️ ✔️ ✔️
更换实例所属的可用区 ✔️ ✔️ ✔️ ✔️
导出实例列表 ✔️ ✔️ ✔️ ✔️ ✔️
账号与安全 创建与管理账号 ✔️ ✔️ ✔️ ✔️ ✔️
修改或重置密码 ✔️ ✔️ ✔️ ✔️ ✔️
设置IP白名单 ✔️ ✔️ ✔️ ✔️ ✔️
添加安全组 ✔️ ✔️ ✔️ ✔️
设置SSL加密 ✔️
开启专有网络免密访问 ✔️ ✔️ ✔️
开启实例释放保护 ✔️ ✔️ ✔️
性能与监控 查看监控数据 ✔️ ✔️ ✔️ ✔️ ✔️
自定义监控项(旧版) ✔️ ✔️ ✔️ ✔️仅支持基础监控组 ✔️仅支持基础监控组
修改监控频率(旧版) ✔️ ✔️ ✔️ ✔️ ✔️
报警设置 ✔️ ✔️ ✔️ ✔️ ✔️
性能趋势 ✔️ ✔️ ✔️ ✔️ ✔️
实时性能 ✔️ ✔️ ✔️ ✔️ ✔️
实例会话 ✔️ ✔️ ✔️ ✔️ ✔️
慢请求 ✔️ ✔️ ✔️ ✔️ ✔️
通过缓存分析展示大Key详情 ✔️ ✔️ ✔️ ✔️ ✔️
查询实时和历史热点Key ✔️ ✔️ ✔️ ✔️ ✔️
发起实例诊断 ✔️ ✔️ ✔️ ✔️ ✔️
审计与日志 开通新版审计日志 ✔️ ✔️ ✔️
查询慢日志 ✔️ ✔️ ✔️
查询运行日志 ✔️ ✔️ ✔️
备份与恢复 自动或手动备份 ✔️ ✔️ ✔️ ✔️ ✔️仅支持自动备份
下载备份文件 ✔️ ✔️ ✔️ ✔️ ✔️
通过数据闪回按时间点恢复数据 ✔️ ✔️
从备份集恢复至新实例 ✔️ ✔️
扩展功能 全球分布式缓存 ✔️ ✔️ ✔️
代理查询缓存 ✔️
增强数据架构模块 ✔️ ✔️ ✔️ ✔️ ✔️
多线程 ✔️ ✔️ ✔️ ✔️ ✔️

常见问题

客户端不支持新模块的命令怎么办?

答:您可以先在应用代码中定义需要使用的新模块命令,然后再使用这些命令,或者直接使用阿里云在Jedis基础上开发的TairJedis客户端。