Azure Cosmos DB Garnet Cache API 兼容性指南:受支持的 Redis 命令、数据类型与实现状态全览

Azure Cosmos DB Garnet Cache API 兼容性指南:受支持的 Redis 命令、数据类型与实现状态全览 Azure Cosmos DB Garnet Cache API 兼容性指南受支持的 Redis 命令、数据类型与实现状态全览【免费下载链接】garnetGarnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.项目地址: https://gitcode.com/GitHub_Trending/garnet4/garnet本指南以 Azure Cosmos DB Garnet Cache微软研究院 Garnet 远程缓存存储的 Azure 全托管服务形态为对象逐条梳理其在 15 个命令类别下对 Redis 命令的实现状态已支持 ➕ / 未支持 ➖并说明键值大小限制、数据类型覆盖范围与 Lua 脚本、Vector Set 等特殊能力的启用前提。读完本文你将掌握该服务与 Redis 生态的兼容边界能够据此评估现有 Redis 客户端代码的迁移成本并为应用设计合理的键值规模。兼容性总览Azure Cosmos DB Garnet Cache 与自托管 Garnet 一样基于 Redis 的 RESP 协议工作因此可以无缝对接各主流编程语言中已有的 Redis 客户端如 C# 的 StackExchange.Redis、Java 的 Jedis/Redisson、Python 的 redis-py、Node.js 的 node_redis、Go 的 go-redis 等。它对 Redis 数据类型与命令的支持是子集式的核心的 String、Hash、Set、Sorted Set加上 Pub/Sub 发布订阅、Lua 脚本默认关闭以及预览阶段的 Vector Set 向量检索都在支持范围内。关于数据规模官方给出了两个明确的量化约束单个键值对的最大大小为 32MB为获得最低延迟建议将键值对大小控制在 1KB 左右。这意味着该服务适合典型的分布式缓存与热数据加速场景而不适合在单个 key 内塞入超大对象。如果你有单 key 超过 32MB 的需求应先在应用层做分片或改用对象存储。需要说明的是Azure Cosmos DB Garnet Cache 支持的命令集合是开源 Garnet 命令集的子集且仍在持续扩充中。判断某个命令是否可用应以本文的完整清单为准而不是直接照搬开源 Garnet 的支持列表——例如开源 Garnet 已实现的BITMAP、GEO、LIST、HYPERLOGLOG、STREAM、TRANSACTIONS、ACL、SLOWLOG、OBJECT、MEMORY、MODULE、JSON 模块等类别在 Azure 托管形态下并未出现在受支持类别清单中。开源完整列表可对照 website/docs/commands/api-compatibility.md。命令类别总览Azure Cosmos DB Garnet Cache 实现的是开源 Garnet 命令的不断增长子集以下列出至少包含一个已支持命令的类别CLIENTCLUSTERCOMMANDCONNECTIONGENERICHASHKEYSLATENCYPUB/SUBSCRIPTINGSERVERSETSORTED SETSTRINGVECTOR SET (Preview)完整命令清单下表沿用官方图例➕ 已实现➖ 未实现。各命令的详细语法与 RESP 返回值可点击链接进入对应的开源 Garnet 命令文档命令语义与开源版一致只是支持状态按本表为准。CLIENT命令实现状态备注CACHING➖GETNAME➖GETREDIR➖HELP➖ID➕INFO➕KILL➖LIST➖NO-EVICT➖NO-TOUCH➖PAUSE➖REPLY➖SETINFO➖SETNAME➖TRACKING➖TRACKINGINFO➖UNBLOCK➖UNPAUSE➖CLIENT 类别在托管服务中只实现了CLIENT ID与CLIENT INFO两条。从源码结构看CLIENT 相关命令的处理逻辑位于 ClientCommands.cs而 ClientSession 目录下的客户端会话实现对应的是开源版的自托管客户端能力。如果你依赖CLIENT SETNAME、CLIENT TRACKINGRESP3 客户端缓存或CLIENT LIST来排查连接在迁移到托管缓存时需要调整运维脚本。CLUSTER命令实现状态备注ADDSLOTS➖ADDSLOTSRANGE➖ASKING➖BUMPEPOCH➖COUNT-FAILURE-REPORTS➖COUNTKEYSINSLOT➖DELSLOTS➖DELSLOTSRANGE➖FAILOVER➖FLUSHSLOTS➖FORGET➖GETKEYSINSLOT➖INFO➖KEYSLOT➕LINKS➖MEET➖MYID➖MYSHARDID➖NODES➕READONLY➕READWRITE➕REPLICAS➖REPLICATE➖RESET➖SAVECONFIG➖SET-CONFIG-EPOCH➖SETSLOT➖SHARDS➖SLAVES➖(Deprecated)SLOTS➕(Deprecated)托管服务的集群拓扑由 Azure 平台负责管理节点通过你创建集群时提供的虚拟网络内部 IP 暴露因此大多数集群管理类命令MEET、SETSLOT、ADDSLOTS等被禁用以避免用户干预平台调度。保留实现的CLUSTER NODES、CLUSTER SLOTS、CLUSTER KEYSLOT主要用于让 Redis 客户端自动发现节点拓扑与计算槽位READONLY/READWRITE则用于在副本上开启/关闭只读路由。集群命令的完整开源实现可参考 RespClusterBasicCommands.cs。COMMAND命令实现状态备注COMMAND➖COUNT➖DOCS➖GETKEYS➖GETKEYSANDFLAGS➖HELP➖INFO➕LIST➖COMMAND INFO已实现可用于查询特定命令是否存在及其实参数信息这是客户端在连接后做能力探测的常用手段。命令元数据名称、参数、类别、ACL 权限位在仓库中由 RespCommandsInfo.cs、RespCommandDocs.cs 等文件维护并由 RespCommandAccessor.cs 提供查询入口。CONNECTION命令实现状态备注AUTH➖ECHO➕HELLO➖PING➕QUIT➖(Deprecated)SELECT➖连接认证在托管服务中不由AUTH命令承担而是改用 Azure RBAC Microsoft Entra ID 的访问令牌方式Redis 客户端通过--user object-id --pass access-token完成鉴权详见 website/docs/azure/quickstart.md 的 Step 4。因此AUTH、HELLO、SELECT均未实现——客户端在连接握手阶段应跳过这些命令。PING与ECHO用于连通性测试在 BasicCommands.cs 中实现。GENERIC命令实现状态备注PERSIST➖PEXPIRE➖PEXPIREAT➖PEXPIRETIME➖PTTL➖RANDOMKEY➖RENAME➖RENAMENX➖RESTORE➖SCAN➖SORT➖SORT_RO➖TOUCH➖TTL➖TYPE➖UNLINK➕WAIT➖WAITAOF➖GENERIC 类别只有UNLINK异步删除键被标记为已实现。注意TTL、EXPIRE等过期相关命令在开源 Garnet 中属于 KEYS 类别需结合下方 KEYS 表一起判断。如果你的代码依赖SCAN做键遍历或RENAME做键重命名在托管服务上需要改用其他方案。HASH命令实现状态备注HDEL➕HEXISTS➕HEXPIRE➕HEXPIREAT➕HEXPIRETIME➕HGET➕HGETALL➕HINCRBY➕HINCRBYFLOAT➕HKEYS➕HLEN➕HMGET➕HMSET➕(Deprecated)HPERSIST➕HPEXPIRE➕HPEXPIREAT➕HPEXPIRETIME➕HPTTL➕HRANDFIELD➕HSCAN➕HSET➕HSETNX➕HSTRLEN➕HTTL➕HVALS➕HASH 是托管服务中覆盖最完整的复合数据结构之一25 条命令全部实现包括 Redis 7.4 引入的字段级过期能力HEXPIRE/HEXPIREAT/HEXPIRETIME/HPEXPIRE/HPEXPIREAT/HPEXPIRETIME/HPTTL/HPERSIST。底层哈希对象的实现位于 Objects/Hash相应命令处理位于 HashObjectCommands.cs。用于会话/用户画像等键内多字段场景时HASH 完全可以作为主力数据结构。KEYS命令实现状态备注COPY➖DEL➕DUMP➖EXISTS➕EXPIRE➕EXPIREAT➖EXPIRETIME➖KEYS➖MIGRATE➖MOVE➖KEYS 类别实现了DEL、EXISTS、EXPIRE三个最常用的键管理命令。注意EXPIREAT绝对时间戳过期与KEYS全库模式匹配未实现——KEYS命令在开源 Garnet 中也仅在单机模式可用托管服务禁用它以避免全库扫描影响性能。键管理命令的核心实现位于 KeyAdminCommands.cs。LATENCY命令实现状态备注DOCTOR➖GRAPH➖HELP➖HISTOGRAM➕HISTORY➖LATEST➖RESET➕LATENCY HISTOGRAM与LATENCY RESET已实现可查看/重置各命令的延迟直方图。在托管服务上更推荐通过 website/docs/azure/monitoring.md 描述的 Azure Monitor 指标做长期观测LATENCY命令适合即时诊断。PUB/SUB命令实现状态备注PSUBSCRIBE➕PUBLISH➕PUBSUB CHANNELS➕PUBSUB HELP➖PUBSUB NUMPAT➕PUBSUB NUMSUB➕PUBSUB SHARDCHANNELS➖PUBSUB SHARDNUMSUB➖PUNSUBSCRIBE➕SUBSCRIBE➕UNSUBSCRIBE➕发布订阅能力完整可用9/11 条已实现支持精确频道与模式匹配PSUBSCRIBE但没有分片频道shard channel能力。底层由 SubscribeBroker.cs 实现订阅分发表命令入口在 PubSubCommands.cs。可用于应用内的消息广播、缓存失效通知等场景。SCRIPTING命令实现状态备注EVAL➕脚本功能默认禁用如需启用请联系 CosmosGarnetCacheservice.microsoft.comEVAL_RO➖EVALSHA➕EVALSHA_RO➖SCRIPT DEBUG➖SCRIPT EXISTS➕SCRIPT FLUSH➕SCRIPT HELP➖SCRIPT KILL➖SCRIPT LOAD➕Lua 脚本EVAL/EVALSHA及SCRIPT LOAD/EXISTS/FLUSH已实现但默认关闭这是托管服务为隔离脚本执行风险而做的安全设计——需要通过邮件申请后才启用。脚本执行引擎即开源 Garnet 的 LuaRunner.cs其托管内存分配器 LuaManagedAllocator.cs 用于限制脚本对服务器内存的占用。注意EVAL_RO/EVALSHA_RO只读脚本与SCRIPT KILL未实现。SERVER命令实现状态备注ACL➖BGREWRITEAOF➖BGSAVE➖COMMITAOF➖CONFIG GET➕CONFIG HELP➖CONFIG RESETSTAT➖CONFIG REWRITE➖CONFIG SET➖DBSIZE➖DEBUG➖内部命令FLUSHALL➖FLUSHDB➕LASTSAVE➖LOLWUT➖MONITOR➖PSYNC➖REPLCONF➖REPLICAOF➖RESTORE-ASKING➖ROLE➖SAVE➖SHUTDOWN➖SLAVEOF➖(Deprecated)SWAPDB➖SYNC➖TIME➖SERVER 类别中绝大多数命令被禁用持久化BGSAVE/SAVE/LASTSAVE、复制REPLICAOF/PSYNC/REPLCONF/SYNC/ROLE、ACL 与 CONFIG 修改、FLUSHALL等均不可用因为这些能力由 Azure 平台托管持久化模式在预配时固定见 website/docs/azure/cluster-configuration.md。唯一常用的是FLUSHDB清空当前库与CONFIG GET读取配置。认证与授权通过 GarnetAclWithAadAuthenticator.cs 一类的 AAD 认证器对接 Entra ID RBAC而非 Redis 原生 ACL 命令。SET命令实现状态备注SADD➕SCARD➕SDIFF➕SDIFFSTORE➕SINTER➕SINTERSTORE➕SINTERCARD➕SISMEMBER➕SMEMBERS➕SMISMEMBER➕SMOVE➕SPOP➕SPUBLISH➖SRANDMEMBER➕SREM➕SSCAN➕SSUBSCRIBE➖SUNION➕SUNIONSTORE➕SUNSUBSCRIBE➖SET 的 16 个常规命令全部实现包括集合运算SINTER/SDIFF/SUNION及其带存储变体、基数估算SINTERCARD、批量成员检测SMISMEMBER。仅与分片发布订阅相关的SPUBLISH/SSUBSCRIBE/SUNSUBSCRIBE未实现。底层实现位于 Objects/Set 与 SetObjectCommands.cs。SORTED SET命令实现状态备注BZMPOP➕BZPOPMAX➕BZPOPMIN➕ZADD➕ZCARD➕ZCOUNT➕ZDIFF➕ZDIFFSTORE➕ZINCRBY➕ZINTER➕ZINTERCARD➕ZINTERSTORE➕ZLEXCOUNT➕ZMPOP➕ZMSCORE➕ZPOPMAX➕ZPOPMIN➕ZRANDMEMBER➕ZRANGE➕ZRANGEBYLEX➕(Deprecated)ZRANGEBYSCORE➕(Deprecated)ZRANGESTORE➕ZRANK➕ZREM➕ZREMRANGEBYLEX➕ZREMRANGEBYRANK➕ZREMRANGEBYSCORE➕ZREVRANGE➕(Deprecated)ZREVRANGEBYLEX➕(Deprecated)ZREVRANGEBYSCORE➕(Deprecated)ZREVRANK➕ZSCAN➕ZSCORE➕ZUNION➕ZUNIONSTORE➕SORTED SET 是覆盖最全面的类别35 条命令全部实现涵盖阻塞弹出BZPOPMIN/BZPOPMAX/BZMPOP、区间查询、排名查询、集合运算与存储变体。Redis 7.x 的ZINTERCARD、ZMPOP、ZMSCORE、ZRANDMEMBER等新命令也在支持之列带ZRANGEBY*/ZREVRANGE*字样的旧命令被标记为 Deprecated建议迁移到统一的ZRANGE语法。底层基于 Objects/SortedSet 与 SortedSetObjectCommands.cs排行榜、时间窗口、延迟队列等场景可以放心使用。STRING命令实现状态备注APPEND➕DECR➕DECRBY➕GET➕GETDEL➕GETEX➕GETRANGE➕GETSET➕INCR➕INCRBY➕INCRBYFLOAT➕LCS➕MGET➕MSET➕MSETNX➕PSETEX➕(Deprecated)SET➕SETEX➕(Deprecated)SETNX➕SETRANGE➕STRLEN➕SUBSTR➕(Deprecated)STRING 类别 22 条命令全部实现是最完整的类别。除基础的GET/SET/MGET/MSET外还包括原子计数INCR/DECR/INCRBYFLOAT、取后删GETDEL、取后设过期GETEX、最长公共子序列LCS等。带PSETEX/SETEX/SUBSTR字样的旧命令标记为 Deprecated。字符串命令主体在 BasicCommands.cs 中实现。由于单键上限为 32MB字符串适合存 JSON 序列化对象、令牌、会话数据等但请遵循 1KB 左右的低延迟建议。VECTOR SET (Preview)命令实现状态备注VADD➕PreviewVSIM➕PreviewVREM➕PreviewVEMB➕Preview无RAWVDIM➕PreviewVINFO➕PreviewVGETATTR➕PreviewVCARD➖尚未实现VISMEMBER➖尚未实现VLINKS➖尚未实现VRANDMEMBER➖尚未实现VSETATTR➖尚未实现Vector Set 是托管服务中面向 AI 场景的预览功能基于 DiskANN 图索引微软的近似最近邻算法与 Garnet 的 Tsavorite 存储引擎可插入高维向量并在同一键上做相似度检索支持可选的 JSON 属性过滤。7 条命令已实现VADD/VSIM/VREM/VEMB/VDIM/VINFO/VGETATTR其余 5 条尚未实现。所有V*命令属于预览特性命令与磁盘布局可能变更在自托管 Garnet 中需以--enable-vector-set-preview服务参数启用。完整的语法、量化方式NOQUANT/XPREQ8、距离度量L2/COSINE/IP/XCOSINE_NORMALIZED与过滤表达式说明见 website/docs/commands/vector-sets.md底层实现位于 Resp/Vector。兼容边界速查迁移时的高频差异综合上述清单从 Redis或开源 Garnet迁移到 Azure Cosmos DB Garnet Cache 时以下几个差异最值得提前确认键值大小单键值对 ≤ 32MB推荐 ≤ 1KB 以获取最低延迟连接鉴权不使用AUTH/HELLO改用 Entra ID 访问令牌 TLS库选择不支持SELECT单实例即单库键遍历不支持SCAN/KEYS全库遍历集合/哈希内遍历可用HSCAN/SSCAN/ZSCAN脚本默认关闭Lua 脚本需申请启用且无EVAL_RO/SCRIPT KILL复制与持久化由平台托管REPLICAOF、BGSAVE、SAVE等不可用持久化模式在创建集群时选定无持久化或 AOF RDB之后不可更改集群管理命令受控客户端仅需CLUSTER NODES/SLOTS/KEYSLOT与READONLY/READWRITE即可正常工作其余集群命令由平台接管。延伸阅读快速上手创建第一个 Azure Cosmos DB Garnet Cache包含 RBAC 配置、网络访问与 redis-cli 连接实测的完整步骤集群配置SKU 分层、分片与副本、区域可用性开源 Garnet 完整命令兼容性清单作为本文清单的父集参考可对比查看开源版已实现而托管版未开放的类别【免费下载链接】garnetGarnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.项目地址: https://gitcode.com/GitHub_Trending/garnet4/garnet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考