Tair内存型(简称内存型)适合并发量大、读写热点多,对性能要求超过Redis社区版实例的场景。相比Redis社区版,内存型重点增强了多线程性能并集成多个自研扩展数据结构。
主要优势
类别 | 说明 |
---|---|
兼容性 |
|
性能 |
|
部署架构 |
|
数据结构模块集成 |
|
企业级特性 |
|
数据安全 |
|
适用场景
- 场景1:使用Redis社区版实例在秒杀场景中构建缓存,部分热点Key的QPS要求高达20万以上,无法满足业务高峰期的需求。
采用内存型(标准架构)实例后,热门商品秒杀过程流畅,未发生性能问题。
- 场景2:在业务中使用Redis社区版集群实例,但在使用事务和Lua脚本功能时有一定的限制。
采用内存型实例后,在满足性能需求的同时消除了集群版的命令使用限制。
- 场景3:自建有一主多备的Redis服务,随着业务中访问量的不断提高,备节点数量也要随之增加,管理维护成本越来越高。
采用具备一个数据节点五个只读副本的内存型(读写分离架构)实例后,可以轻松应对百万级QPS的业务挑战。
- 场景4:自建有Redis集群来承担线上千万级QPS的业务压力。随着业务的发展,Redis分片数不断增加,管理维护成本居高不下。
采用内存型(集群架构)实例后,集群规模缩到原来的三分之一,管理维护成本大幅降低。
线程模型对比
线程架构 | 说明 |
---|---|
![]() | Redis社区版和原生Redis采用单线程模型,数据处理流程为:读取请求,解析请求,处理数据,发送响应。其中网络IO和请求解析占用了大部分的资源。 |
![]() | Tair内存型将服务各阶段的任务进行分离,通过分工明确的多个线程并行处理各阶段任务,达到提高性能的目的。
IO线程读取用户的请求并进行解析,之后将解析结果以命令的形式放在队列中发送给Worker线程处理。Worker线程将命令处理完成后生成响应,通过另一条队列发送给IO线程。 Tair内存型最多支持4个IO线程并发运行。为了提高线程的并行度,IO线程和Worker线程之间采用无锁队列和管道进行数据交换。 说明
|
性能对比
架构 | 云数据库Redis版 | Tair内存型 |
---|---|---|
标准架构 | 不适用于单节点QPS要求超过10万的场景。 | 可应用于QPS高于10万的场景。 |
集群架构 | 包含多个数据节点,每个节点的性能与标准版实例相似。当某个节点储存了热度较高的数据并面临大并发量的请求时,该节点中其它数据的读写可能受到影响,形成性能瓶颈。 | 能更好地应对热读写,降低维护成本。 |
读写分离架构 | 有较高的读性能,在读多写少的场景表现良好,但不适用于大并发写入的场景。 | 既有较高的读性能,又能承受大并发写入,适用于写请求多而读请求更多的场景。 |
数据结构模块集成
云Redis社区版与开源Redis相同,支持String、List、Hash、Set、Sorted Set、Stream等数据类型,能够满足大部分场景下的开发需求,但在一些复杂场景中,原生数据类型无法直接满足某些业务需求,只能使用通过调整应用数据、使用Lua脚本等方式来实现。
内存型集成多个自研的Redis模块,包括TairString(含CAS和CAD命令)、TairHash、TairGIS、TairBloom、TairDoc、TairTS、TairCpc、TairZset、TairRoaring、TairVector和TairSearch,扩展了Redis的适用性,同时降低了复杂场景下业务的开发难度,让您专注于业务创新。
扩展数据结构 | 说明 |
---|---|
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标准,类似RedisJSON模块。同时,TairDoc数据以二进制树的方式存储,支持对JSON中子元素进行快速访问。 |
TairTS | TairTS是基于Redis Module开发的时序数据结构,提供低时延、高并发的内存读写访问,及快速的过滤、聚合查询功能,集存储与计算为一体,在简化了处理时序数据流程的同时,大幅度提高了性能。 |
TairCpc | TairCpc是基于CPC(Compressed Probability Counting)压缩算法开发的数据结构,支持仅占用很小的内存空间对采样数据进行高性能计算。 |
TairZset | TairZset可实现任意维度的double类型的分值排序,提升数据处理效率,且客户端适配简易,无需任何编解码封装,解决原生Sorted Set(也称Zset)只支持1个double类型的分值排序的局限性。 |
TairRoaring | TairRoaring是基于Tair引擎的Roaring Bitmap实现,通过2层索引和引入多种动态容器(Container),同时使用了包括SIMD instructions、Vectorization、PopCnt算法在内的等多种工程优化,提供更低的内存占用及更高的集合计算效率。 |
TairSearch | TairSearch是基于Redis module全自研(不基于Lucene等开源搜索库)的全文搜索模块,采用和Elasticsearch相似(ES-LIKE)的查询语法。 |
TairVector | TairVector是Tair自研的扩展数据结构,提供高性能、实时,集存储、检索于一体的向量数据库服务。 |
企业级特性
企业级特性 | 说明 |
---|---|
通过数据闪回按时间点恢复数据 | 开启Redis的数据闪回功能后,Redis最长可将AOF备份数据保留7天,在此期间您随时可以指定一个精确到秒的时间点,系统会基于所选时间点的备份数据创建一个新的实例,实现精确的数据恢复。 |
代理查询缓存 | 开启代理查询缓存功能(Proxy Query Cache)后,代理节点会缓存热点Key对应的请求和返回信息,当在有效时间内收到同样的请求时直接返回结果至客户端,无需和后端的数据分片交互。更多信息,请参见通过Proxy Query Cache优化热点Key问题。 |
全球多活 | Redis全球多活是基于云数据库Redis自研的多活数据库系统,可轻松实现异地多个站点同时对外提供服务的业务场景,助力企业快速复制阿里巴巴异地多活架构。 |
借助DTS实现双向数据同步 | 通过数据传输服务DTS(Data Transmission Service)实现Redis企业版实例间的双向数据同步,可应用于异地多活、数据容灾等多种场景,详情请参见Redis企业版实例间的双向同步。 |
常见问题
Q:客户端不支持新模块的命令怎么办?
A:您可以先在应用代码中定义需要使用的新模块命令,然后再使用这些命令,或者通过Tair客户端直接调用Tair扩展数据结构,更多信息,请参见。