相比云数据库Redis社区版,企业版性能增强型实例主要在两个方面进行了优化:多线程性能增强和多模块集成。本章节介绍性能增强型实例集成的Redis模块(Redis Modules),以及这些模块为云数据库Redis版扩展的功能和特性。

说明 对多线程性能增强特性的说明请参见多线程性能增强

背景信息

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

TairString

TairString模块包含两个部分:

  • Redis String性能增强命令

    包含CAS和CAD,可以实现简洁高效的Redis分布式锁。使用说明及示例请参见CAS/CAD命令

  • TairString数据结构及相关命令

    TairString是一种带版本号的string类型数据结构。原有的Redis String由key和value组成,而TairString不仅包含key和value,还携带了版本(version),可用于乐观锁等场景。除此之外,TairString在Redis String加减功能的基础上支持了边界设置,可以将INCRBY、INCRBYFLOAT的结果限制在一定的范围内,超出范围则提示错误,适用于限流器等场景。

    TairString命令使用说明及示例请参见TairString命令

    说明 TairString与Redis原生String是两种不同的数据结构。

TairHash

该模块为Redis增加了一种新的数据结构:TairHash。

TairHash是一种hash类型的数据,不但和原有的Redis Hash一样支持丰富的数据接口和高处理性能,还突破了Redis Hash只能为key设置过期时间的限制,支持为field设置过期时间和版本,极大地提高了hash数据结构的灵活性,简化了很多场景下的业务开发工作。TairHash使用高效的Active Expire算法,可以在不对响应时间造成明显影响的前提下,更高效的完成对field的超时判断和删除。

TairHash命令使用说明请参见TairHash命令

说明 TairHash与Redis原生Hash是两种不同的数据结构。

TairGIS

该模块为Redis增加了一种新的数据结构:TairGIS。

TairGis是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令是使用GeoHash和Redis Sorted Set结构完成的,使用1D索引,主要用于点的查询,TairGIS使用2D索引,除了对点的查询,还支持线、面的查询,尤其适合用于判断相交或包含关系,功能更加强大。

TairGIS命令使用说明及示例请参见TairGIS命令

TairBloom

该模块为Redis增加了一种新的数据结构:TairBloom。

TairBloom是一种可动态扩容的布隆过滤器,完全兼容RedisBloom模块的命令。TairBloom首先是一种概率性数据结构(space-efficient probabilistic data structure),主要使用较低的内存消耗来判断一个元素是否存在;其次,TairBloom具有动态扩容的能力,可在扩容的同时维持证误判率的稳定。

借助传统的Redis数据结构,例如Hash、Set、String的Bitset等,也可以实现与TairBloom功能类似的效果,但这些实现方式不是内存占用量非常大,就是无法动态伸缩和保持误判率不变。因此,TairBloom非常适合需要高效判断大量数据是否存在且允许一定误判率的业务场景。业务可以直接使用TairBloom提供的Bloom Filter接口,无需二次封装,更无需在本地实现布隆过滤器的功能。

TairBloom命令使用说明及示例请参见TairBloom命令

TairDoc

该模块为Redis增加了一种新的数据结构:TairDoc。

TairDoc是一种文档类型的数据结构,支持JSON标准,完全兼容ReJSON模块的命令。TairDoc数据以二进制树的方式存储,支持对JSON中子元素的快速访问。

TairDoc命令使用说明及示例请参见TairDoc命令

常见问题

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

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