全部产品
Search
文档中心

:内存型

更新时间:Jul 23, 2024

云原生内存数据库Tair内存型(简称内存型)适合并发量大、读写热点多、高性能场景,内存型重点增强了多线程性能并集成多个自研扩展数据结构。

购买方式

创建实例

主要优势

类别

说明

兼容性

  • 100%兼容原生Redis,无需修改业务代码,提供兼容Redis 7.0兼容Redis 6.0兼容Redis 5.0版本。

性能

  • 采用多线程模型,性能约为同规格社区版实例的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. Tair多线程模型增强性能Redis实例的多线程模型

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

  • IO线程:负责请求读取、响应发送、命令解析等。

  • Worker线程:负责命令处理、定时器事件等。

  • 辅助线程:负责高可用探测、保活等。

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

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

说明
  • 对于通用的类型,例如:String、List、Set、Hash、Zset、 Hyperloglog、Geo以及扩展结构都有很好的加速效果。

  • 对于Pub、Sub、Blocking系列API,由于其复制是在worker中完成的,可被加速提升吞吐,性能提升约50%。

  • 由于Transaction、Lua script要求串行执行,无加速效果。

说明

区别于Redis社区版6.0的多线程(性能至多提升2倍,且CPU资源消耗高),内存型的Real Multi-IO能够将IO加速地更彻底,具备更高的抗连接冲击性,且可以线性地提升吞吐能力。

性能对比

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

架构

云数据库Redis版

Tair内存型

标准架构

不适用于单节点QPS要求超过10万的场景。

可应用于QPS高于10万的场景。

集群架构

包含多个数据节点,每个节点的性能与标准版实例相似。当某个节点储存了热度较高的数据并面临大并发量的请求时,该节点中其它数据的读写可能受到影响,形成性能瓶颈。

能更好地应对热读写,降低维护成本。

读写分离架构

有较高的读性能,在读多写少的场景表现良好,但不适用于大并发写入的场景。

既有较高的读性能,又能承受大并发写入,适用于写请求多而读请求更多的场景。

数据结构模块集成

内存型集成多个自研的数据模块,包括exString(包含Redis String命令增强)、exHashexZsetGISBloomDocTSCpcRoaringSearchVector,扩展了适用性,同时降低了复杂场景下业务的开发难度,让您专注于业务创新。

说明
  • 内存型(兼容Redis 7.0、6.0)兼容所有数据结构。

  • 内存型(兼容Redis 5.0)兼容除TairVector以外的所有数据结构。

类型

Tair扩展数据结构

Redis Stack Server(对比项)

说明

String增强

  • TairString是一种带版本号的string类型数据结构,同时还在Redis String加减功能的基础上支持了边界设置,可以将INCRBY、INCRBYFLOAT的结果限制在一定的范围内,超出范围则提示错误。该数据结构已开源,更多信息请参见TairString

  • CAS和CAD命令可实现简洁高效的高性能分布式锁

最佳实践:基于TairString实现高性能乐观锁基于TairString实现高效限流器

Hash增强

exHash

TairHash支持为field设置过期时间和版本,提高了Hash数据结构的灵活性,简化了很多场景下的业务开发工作。该数据结构已开源,更多信息请参见TairHash

最佳实践:基于TairHash实现用户多设备登录管理

Zset增强

exZset

TairZset可实现256个维度的double类型的分值排序,提供普通排行榜和多维排行榜的能力。该数据结构已开源,更多信息请参见TairZset

最佳实践:基于TairZset轻松实现多维排行榜基于TairZset实现分布式架构排行榜

GeoSpatial

GIS

TairGIS是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。支持点、线、面的查询,支持包含、被包含、相交等多种关系判断。该数据结构已开源,更多信息请参见TairGIS

最佳实践:基于TairGIS实现电子围栏基于TairGIS实现同城购业务

Doc(JSON)

Doc

RedisJSON

TairDoc是一种文档类型的数据结构,支持JSON标准,类似RedisJSON模块。同时,TairDoc数据以二进制树的方式存储,支持对JSON中子元素进行快速访问。

Search

Search

RediSearch

TairSearch提供类似Elasticsearch(ES-LIKE)的语法,提供种类更多、效果更准确的分词器,查询性能更佳。

TimeSeries

TS

RedisTimeSeries

TairTS相比较RedisTimeSeries具备更强的标签(Tag)扩展能力,支持Skey(Tag)的两级Hash结构时间线,支持对Skey(Tag)进行二级时间线聚合查询,支持对历史时序数据的更新或累加等。

最佳实践:基于TairTS实现秒级监控

Sketches

Bloom

RedisBloom

TairBloom兼容RedisBloom,支持动态扩容,同时通过64位的Hash算法降低Hash碰撞率,显著降低大数据的冲撞率。

最佳实践:推荐系统、爬虫系统,更多信息请参见Bloom

Cpc

TairCpc是基于CPC(Compressed Probability Counting)压缩算法开发的数据结构,支持仅占用很小的内存空间对采样数据进行高性能计算,支持滚动窗口和滑动窗口,可以更好地支持流式运算,支持大数据分析中常用的聚合算子,如:DISTINCTCOUNTMAXMINFIRSTLASTSQUARED等。

Bitmap

Roaring

TairRoaring提供高效的计算模块和极高的稳定性,支持多位图运算能力,提升了性能和空间效率。

最佳实践:基于TairRoaring实现人群圈选方案

向量检索

Vector

Redis Search (Vector Similarity)

TairVector是Tair自研的扩展数据结构,提供高性能、实时,集存储、检索于一体的向量数据库服务。

最佳实践:

企业级特性

企业级特性

说明

通过数据闪回按时间点恢复数据

开启Tair的数据闪回功能后,Tair最长可将AOF备份数据保留7天,在此期间您随时可以指定一个精确到秒的时间点,系统会基于所选时间点的备份数据创建一个新的实例,实现精确的数据恢复。

代理查询缓存

开启代理查询缓存功能(Proxy Query Cache)后,代理节点会缓存热点Key对应的请求和返回信息,当在有效时间内收到同样的请求时直接返回结果至客户端,无需和后端的数据分片交互。

全球多活

Tair全球多活是基于云数据库Redis自研的多活数据库系统,可轻松实现异地多个站点同时对外提供服务的业务场景,助力企业快速复制阿里巴巴异地多活架构。

Tair实例双向同步

通过数据传输服务DTS(Data Transmission Service)实现Tair实例间的双向数据同步,可应用于异地多活、数据容灾等多种场景。

常见问题

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

A:您可以先在应用代码中定义需要使用的新模块命令,然后再使用这些命令,或者通过Tair客户端直接调用Tair扩展数据结构,更多信息,请参见Tair Clients