kevy4.0

命令

184 个命令

服务器会应答的每一个动词,直接来自它自己的注册表 —— 也就是 COMMAND DOCS 读的同一张表。有两栏是 Redis 的参考文档里没有的:这个命令在本引擎里的真实代价,以及它与 Redis 的差异

命令分组 复杂度与 Redis 的兼容性 摘要
APPEND字符串值不超过 64 B 时是均摊 O(1);一旦超过这个阈值,每次调用都是 O(N)兼容在字符串值尾部追加字节,返回追加后的新长度。
DECR字符串O(1)兼容把 key 的整数值减 1。
DECRBY字符串O(1)兼容把 key 的整数值减去指定的量。
GET字符串O(1)兼容返回 key 的字符串值。
GETDEL字符串O(1)兼容返回 key 的字符串值,同时把这个 key 删掉。
GETSET字符串O(1)兼容写入新的字符串值,并返回改写前的旧值。
INCR字符串O(1)兼容把 key 的整数值加 1。
INCRBY字符串O(1)兼容把 key 的整数值加上指定的量。
INCRBYFLOAT字符串O(1)有差异把 key 的浮点值加上指定的量。
MGET字符串O(N) 个 key,每个 key 在其归属 shard 上做一次 O(1)…有差异批量返回多个 key 的值(跨 shard 汇聚)。
MSET字符串O(N) 组,每组一次 O(1) 的 SET有差异批量写入多组 key 与 value —— 原子性只到单个 shard 之内。
PSETEX字符串O(1)兼容写入 key 的值,并设定以毫秒为单位的 TTL。
SET字符串O(1)有差异写入 key 的字符串值,可选地带上 TTL 与存在性条件。
SETEX字符串O(1)兼容写入 key 的值,并设定以秒为单位的 TTL。
SETNX字符串O(1)兼容仅当 key 不存在时才写入它的值。
STRLEN字符串O(1)兼容返回 key 所存字符串值的长度。
DEL通用键操作O(N) 个 key;某个 key 若存的是含 M 个元素的容器,还要为它多…有差异删除一个或多个 key。
EXISTS通用键操作O(N) 个 key,每个做一次 O(1) 探测有差异统计给定的这些 key 里有多少个存在。
EXPIRE通用键操作O(1)有差异设定 key 的 TTL,单位为秒(TTL 为非正数时直接删除该 key)。
EXPIREAT通用键操作O(1)有差异把 key 的过期时刻设为一个绝对 Unix 时间戳,单位为秒。
PERSIST通用键操作O(1)兼容移除 key 上的 TTL。
PEXPIRE通用键操作O(1)有差异设定 key 的 TTL,单位为毫秒。
PEXPIREAT通用键操作O(1)有差异把 key 的过期时刻设为一个绝对 Unix 时间戳,单位为毫秒。
PTTL通用键操作O(1)兼容返回 key 的剩余 TTL,单位为毫秒(-1 表示没有 TTL,-2 表示 key 不存在)。
RENAME通用键操作字符串值是 O(1);含 M 个元素的容器是 O(M)有差异重命名 key,直接覆盖掉目标 key(写在 runtime 的 Op 层路由)。
RENAMENX通用键操作字符串值是 O(1);含 M 个元素的容器是 O(M)有差异仅当目标 key 不存在时才重命名(写在 runtime 的 Op 层路由)。
TTL通用键操作O(1)兼容返回 key 的剩余 TTL,单位为秒(-1 表示没有 TTL,-2 表示 key 不存在)。
TYPE通用键操作O(1)兼容返回 key 所存值的类型。
UNLINK通用键操作O(N) 个 key,容器类型的 key 每个另加 O(M)有差异删除一个或多个 key(在 kevy 的 shard 模型里,它就是 DEL 的别名)。
KEYS键空间扫描O(N),N 为整个键空间的 key 数兼容返回键空间里所有匹配该 glob 模式的 key(跨 shard 汇聚)。
RANDOMKEY键空间扫描期望 O(1)有差异从键空间里返回一个随机 key。
SCAN键空间扫描每次调用都是 O(N),N 为整个键空间的 key 数有差异扫一遍键空间,把全部匹配项一次返回;它不是游标迭代器(COUNT 与 TYPE 会被接受然后忽略,游标恒为 0)。
BLPOP列表服务一次是 O(1);阻塞挂起本身是 O(1),同一个 key 上的等待者按…有差异在一个或多个 list 上做阻塞式左弹出(effect 按 LPOP 记录)。
BRPOP列表服务一次是 O(1);阻塞挂起按 FIFO 排队有差异在一个或多个 list 上做阻塞式右弹出(effect 按 RPOP 记录)。
BRPOPLPUSH列表服务一次是 O(1)有差异阻塞版的 RPOPLPUSH:弹出 source 的尾元素,压入 destination 的头部。
LINDEX列表O(1)兼容返回 list 中指定下标处的元素。
LLEN列表O(1)兼容返回 list 的长度。
LMOVE列表O(1)有差异在两个 list 之间原子地搬运一个元素。
LPOP列表O(C),C 为弹出的元素个数有差异从 list 头部弹出一个或多个元素。
LPOS列表恒为 O(N)兼容返回 list 中匹配元素的下标。
LPUSH列表O(M),M 为元素个数,每个均摊 O(1)兼容把一个或多个元素压入 list 头部。
LRANGE列表O(M),M 为返回的元素个数兼容返回 list 的一段区间。
LREM列表最坏 O(N*R)兼容从 list 中删除所有等于给定值的元素。
LSET列表O(1)兼容改写 list 中指定下标处的元素。
LTRIM列表O(R),R 为被移除的元素个数兼容把 list 裁剪到给定区间。
RPOP列表O(C),C 为弹出的元素个数有差异从 list 尾部弹出一个或多个元素。
RPOPLPUSH列表O(1)有差异弹出 source 的尾元素,压入 destination 的头部。
RPUSH列表O(M),M 为元素个数,每个均摊 O(1)兼容把一个或多个元素追加到 list 尾部。
HDEL哈希O(M),M 为 field 个数兼容删除 hash 中的一个或多个 field。
HEXISTS哈希O(1)兼容判断 hash 中某个 field 是否存在。
HEXPIRE哈希O(F),F 为 FIELDS 子句里列出的 field 个数有差异给 hash 的若干 field 分别设定 TTL,单位为秒。
HGET哈希O(1)兼容返回 hash 中某个 field 的值。
HGETALL哈希O(N),N 为 field 个数,每个 field 名和值都会被完整拷贝一份兼容返回 hash 的全部 field 与值。
HINCRBY哈希O(1)兼容把 hash 中某个 field 的整数值加上指定的量。
HKEYS哈希O(N),N 为 field 个数兼容返回 hash 的全部 field 名。
HLEN哈希O(1)兼容返回 hash 的 field 数量。
HMGET哈希O(M),M 为请求的 field 个数兼容批量返回 hash 中多个 field 的值。
HMSET哈希O(M),M 为 field 与值的组数兼容HSET 的废弃别名,回复 OK。
HPERSIST哈希O(F),F 为 field 个数有差异移除 hash 上 field 级别的 TTL。
HPEXPIRE哈希O(F),F 为 field 个数有差异给 hash 的若干 field 分别设定 TTL,单位为毫秒。
HPEXPIREAT哈希O(F),F 为 field 个数有差异把 hash 中若干 field 的过期时刻设为绝对 Unix 毫秒时间戳。
HPTTL哈希O(F)有差异按字段返回剩余 TTL、单位为毫秒(-1 表示无 TTL、-2 表示字段不存在)。
HSCAN哈希O(N)有差异遍历 hash 的 field 与值(单批次游标)。
HSET哈希O(M),M 为 field 与值的组数兼容写入一个或多个 hash field,返回其中新增的 field 数。
HSETNX哈希O(1)兼容仅当该 field 不存在时才写入 hash field。
HTTL哈希O(F)有差异按字段返回剩余 TTL、单位为秒(-1 表示无 TTL、-2 表示字段不存在)。
HVALS哈希O(N),N 为 field 个数兼容返回 hash 的全部值。
SADD集合O(M),M 为成员个数兼容向 set 添加一个或多个成员。
SCARD集合O(1)兼容返回 set 的成员数量。
SDIFF集合O(各源 set 基数之和)兼容返回若干 set 的差集(跨 shard 汇聚)。
SDIFFSTORE集合O(各源 set 基数之和),再加上在 destination 所属 sha…兼容把若干 set 的差集写入 destination。
SINTER集合O(各源 set 基数之和)兼容返回若干 set 的交集(跨 shard 汇聚)。
SINTERSTORE集合O(各源 set 基数之和) 加 O(结果集大小);同样没有「先取最小集合」…兼容把若干 set 的交集写入 destination。
SISMEMBER集合O(1)兼容判断某个值是不是 set 的成员。
SMEMBERS集合O(N),N 为成员个数兼容返回 set 的全部成员。
SPOP集合期望 O(count);用 N 次调用把一个 N 成员的 set 抽干是 O…有差异随机移除并返回 set 中的一个或多个成员。
SRANDMEMBER集合期望 O(count)有差异随机返回 set 中的一个或多个成员,不移除它们。
SREM集合O(M),M 为成员个数兼容从 set 移除一个或多个成员。
SSCAN集合O(N)有差异遍历 set 的成员(单批次游标)。
SUNION集合O(各源 set 基数之和)兼容返回若干 set 的并集(跨 shard 汇聚)。
SUNIONSTORE集合O(各源 set 基数之和) 加 O(结果集大小)兼容把若干 set 的并集写入 destination。
BZPOPMIN有序集合每次弹出 O(log N);阻塞挂起本身是 O(1)兼容在一个或多个 zset 上做阻塞式弹出,取分值最低的成员。
ZADD有序集合O(M log N)兼容向 zset 添加带分值的成员,可带条件标志。
ZCARD有序集合O(1)兼容返回 zset 的成员数量。
ZCOUNT有序集合O(N)兼容统计分值落在给定区间内的成员个数。
ZDIFFSTORE有序集合O(各源 zset 基数之和 + R log R);每个源都在各自的 sha…兼容把若干 zset 的差集写入 destination。
ZINCRBY有序集合O(log N)兼容增加 zset 中某个成员的分值。
ZINTERCARD有序集合O(各源 zset 基数之和)兼容返回若干 zset 交集的基数。
ZINTERSTORE有序集合O(各源 zset 基数之和 + R log R)兼容把若干 zset 的交集写入 destination。
ZPOPMIN有序集合O(M log N)兼容弹出至多 count 个分值最低的成员。
ZPOPMIN.BELOW有序集合O(M log N)kevy 独有kevy 扩展:弹出至多 count 个分值严格小于阈值的最低成员(延时任务原语)。
ZRANGE有序集合O(start + M)有差异按排名区间返回成员。
ZRANGEBYSCORE有序集合O(N + M)兼容返回分值落在给定区间内的成员。
ZRANK有序集合O(N)有差异返回成员的排名 —— 按分值从低到高。
ZREM有序集合O(M log N)兼容从 zset 移除一个或多个成员。
ZREMRANGEBYRANK有序集合O(start + M log N)兼容移除落在给定排名区间内的成员。
ZREMRANGEBYSCORE有序集合O(N + M log N)兼容移除分值落在给定区间内的成员。
ZREVRANGEBYSCORE有序集合O(N + M)兼容返回分值落在给定区间内的成员,从高到低排列。
ZSCAN有序集合O(N)有差异遍历 zset 的成员与分值(单批次游标)。
ZSCORE有序集合O(1)兼容返回成员的分值。
ZUNIONSTORE有序集合O(各源 zset 基数之和 + R log R)兼容把若干 zset 的并集写入 destination。
XACKO(A log P)兼容确认消费者组的待处理条目,把它们从 PEL 中移除。
XADD插入是 O(log N);只要 MAXLEN / MINID 子句真的淘汰了…有差异向流追加一条条目,可顺带按 MAXLEN / MINID 裁剪。
XAUTOCLAIMO(log P + K + COUNT log N);空闲过滤跑在取数之前,…有差异从游标开始扫描并认领空闲的待处理条目。
XCLAIMO(A * (log P + log N))有差异认领指定的空闲待处理条目。
XDEL删 D 个 ID 是 O(D log N + N*F)兼容按 ID 删除流中的条目。
XGROUPCREATE / DESTROY:O(1),外加一次 O(N*F) 的权重重算有差异管理流的消费者组。
XINFOSTREAM:O(1)有差异查看流本身、它的消费者组或组内的消费者。
XLENO(1)兼容返回流中条目的数量。
XPENDING汇总形式:O(P*C)兼容查看消费者组的待处理条目(汇总形式或扩展形式)。
XRANGEO(log N + M)兼容返回某个 ID 区间内的流条目。
XREADS 条流合计 O(S * (log N + M));「$」是 O(1);挂起…有差异从一条或多条流读取新条目,可阻塞。
XREADGROUP「>」形式:O(log N + U + M)有差异以消费者组成员的身份读取流条目,可阻塞。
XREVRANGEO(log N + M)兼容按逆序返回某个 ID 区间内的流条目。
XSETIDO(log N)兼容覆写流的 last-generated ID 与相关的记账计数器。
XTRIM淘汰 R 条条目是 O(R log N + N*F)有差异按长度或最小 ID 裁剪流。
GEOADD地理空间O(M log N);带 CH 时再加一项 O(M^2)兼容向 geo 集合添加成员(经度 / 纬度)。
GEODIST地理空间O(1)兼容返回两个 geo 成员之间的距离。
GEOHASH地理空间O(M)兼容返回每个成员的 base32 geohash 字符串。
GEOPOS地理空间O(M)兼容返回每个成员的经纬度。
GEORADIUS地理空间每次调用 O(N);带 STORE / STOREDIST 时再加 O(K…有差异以坐标为圆心的旧式半径搜索,可选把结果写入目标 key。
GEORADIUSBYMEMBER地理空间每次调用 O(N);锚点成员的查找是 O(1)有差异以已有成员为圆心的旧式半径搜索,可选把结果写入目标 key。
GEOSEARCH地理空间每次调用 O(N)有差异从某个成员或某个坐标出发,按半径或矩形范围搜索成员。
GEOSEARCHSTORE地理空间搜索 O(N),外加在 destination 所属 shard 上重写它的…有差异在 source 上执行 GEOSEARCH,并把命中结果写入 destination。
ECHO连接O(1)兼容原样返回给定的消息。
HELLO连接O(1)有差异握手:返回服务器信息,并切换 RESP 协议版本(2 或 3)。
PING连接O(1)有差异探活;返回 PONG,或回显可选的消息。
QUIT连接O(1)兼容回复 OK 之后关闭连接。
SELECT连接O(1)有差异选择逻辑数据库;kevy 只有单库,只接受索引 0。
BGREWRITEAOF服务器O(S) 扇出;每个 shard 冻结一份写时复制视图,再把序列化与 fsy…有差异在后台开始一次 append-only 文件重写。
BGSAVE服务器O(S) 扇出;每个 shard 在 reactor 上做 O(N/S) 的…有差异在后台开始一次快照保存。
CLIENT服务器ID / GETNAME / SETNAME / INFO:O(1)有差异连接的查看与控制子命令。
CLUSTER服务器INFO / NODES / SLOTS / SHARDS / MYID:O…有差异集群拓扑查看(架在 shard 之上的虚拟节点模型)。
COMMAND服务器裸命令 / LIST / DOCS:O(V) 个命令有差异查看命令表(COUNT、LIST、INFO、DOCS 子命令)。
CONFIG服务器GET:O(patterns * 16)有差异读取或修改服务器的配置参数。
DBSIZE服务器O(S)兼容返回所有 shard 上的 key 总数。
DEBUG服务器SLEEP:把应答的那个 shard 的 reactor 线程停住指定时长(…有差异调试子命令;SLEEP 会阻塞一个 shard,其余子命令一律容忍并返回 OK。
FLUSHALL服务器O(S) 扇出;每个 shard 做 O(N/S) 的清空,外加 WATCH…有差异删除每个 shard 上的每一个 key。
FLUSHDB服务器O(N + S)有差异删除当前数据库的每一个 key(kevy 是单库:等同于 FLUSHALL)。
INFO服务器在键空间上是 O(1)有差异以文本形式输出服务器的统计与状态分区。
MEMORY服务器USAGE:O(1)有差异内存查看子命令。
SAVE服务器O(S) 扇出;每个 shard 做 O(N/S) 的写时复制冻结有差异把数据集同步快照到磁盘。
SHUTDOWN服务器把停止标志置位是 O(1);随后的排空收尾是 O(N)有差异停止服务器进程(连接直接断开,不返回任何回复)。
SLOWLOG服务器GET:O(S) 扇出,外加 O(L log L) 的归并有差异查看或重置慢命令日志。
DISCARD事务O(1)兼容放弃已经开启的 MULTI 事务。
EXEC事务O(排队命令各自代价之和);若 WATCH 了 W 个 key,还要多一次…有差异执行自 MULTI 以来排队的全部命令。
MULTI事务O(1)兼容开启事务;后续命令会排队,直到 EXEC。
UNWATCH事务O(1)兼容清空所有被 WATCH 的 key。
WATCH事务W 个 key 是 O(W),归并成 O(min(W,S)) 条跨 shar…兼容监视 key,为下一次 EXEC 做乐观锁。
EVAL脚本O(编译 + 脚本自身的开销)有差异在服务端执行一段 Lua 脚本;当 numkeys >= 1 时,路由到 KEYS[1] 所在的 shard。
EVALSHA脚本缓存查找 O(1),之后与 EVAL 完全相同有差异按 SHA1 摘要执行已缓存的 Lua 脚本。
SCRIPT脚本LOAD:O(len(script))有差异管理进程级的 Lua 脚本缓存。
PSUBSCRIBE发布订阅O(p * P)兼容订阅与给定 glob 模式匹配的频道。
PUBLISH发布订阅频道查找 O(1),外加 O(P)兼容向频道投递一条消息;返回接收者数量。
PUNSUBSCRIBE发布订阅O(p * P)兼容退订模式(不给参数时退订全部模式)。
SUBSCRIBE发布订阅O(c) 个频道;从不扇出到其它 shard有差异订阅给定的频道。
UNSUBSCRIBE发布订阅O(c) 个频道兼容退订频道(不给参数时退订全部频道)。
FAILOVER复制命令本身 O(1)有差异有计划的零丢失切换:停写、等目标副本追平、把它提升为主、然后本机改为跟随它。
REPL.TOKEN复制O(S)kevy 独有kevy 扩展:签发一个 read-your-writes 令牌 —— 每个 shard 一对 [generation, offset](主库报告自己 feed 的尾部,副本报告自己已应用到的位置)。
REPL.WAIT复制O(S)kevy 独有kevy 扩展:在副本上阻塞,直到每个 shard 都应用了给定的 REPL.TOKEN(此后的读即为 read-your-writes);成功返回 +OK,超时或代际不匹配返回 -MISDIRECTED writer is <primary>。TIMEOUT 默认 1000 ms,硬上限 60 s。在主库上:立即返回 +OK。
REPLICAOF复制命令本身 O(1);随后的全量重同步在后台进行,代价是 O(N)有差异让本机成为另一台服务器的副本,或用 NO ONE 把它提升为主。
ROLE复制副本上 O(1);主库上 O(R)兼容报告本机的复制角色与状态。
SLAVEOF复制O(1),外加一次后台重同步有差异REPLICAOF 的旧式别名。
WAIT复制O(S)有差异阻塞直到每个 shard 的 master_repl_offset 都被至少 numreplicas 个副本确认(或者超过 timeout 毫秒);返回各 shard 中最小的已确认副本数。timeout 0 表示一直等,硬上限 60 s。注意:副本的 ACK 不等于 fsync 落盘。
IDX.COUNT索引每个 shard 上 O(log N + matched)kevy 独有统计匹配区间谓词或等值谓词的索引条目数。
IDX.CREATE索引调用本身 O(1);构建是异步的kevy 独有在某个 key 前缀上声明一个二级索引(catalog 变更,由 sidecar 持久化)。
IDX.DROP索引O(catalog 大小)kevy 独有删除一个已声明的索引(catalog 变更,由 sidecar 持久化)。
IDX.EXPLAIN索引执行计划只靠解析得出,但 est_rows 要付出与 IDX.LIST 相同…kevy 独有只做 IDX.QUERY 的解析而不执行:给出索引种类、构建状态、est_rows 和一行执行计划。
IDX.LIST索引不是 O(1)kevy 独有列出已声明的索引,附带每个索引的构建状态与统计。
IDX.QUERY索引取决于索引种类kevy 独有查询索引:区间 / 等值、文本 MATCH、向量 KNN、聚合分组,或跨两个索引的 COMPOSE。
IDX.REBUILD索引仅对向量索引有效(墓碑压实)kevy 独有重建一个 ANN 索引(墓碑压实)。
IDX.VERIFY索引每个 shard 上 O(N)kevy 独有校验索引:把每一条索引项都拿回它对应的行重读一遍,报告 entries / bytes / coerce_failures / duplicates / drift / checked。
VIEW.CREATE视图调用本身 O(树的大小)kevy 独有在若干索引之上声明一个组合视图,并指定 ORDER BY(catalog 变更,由 sidecar 持久化)。
VIEW.DROP视图O(catalog 大小)kevy 独有删除一个已声明的视图(catalog 变更,由 sidecar 持久化)。
VIEW.EXPLAIN视图O(各叶子的 (log N + matched) 之和)kevy 独有展开视图的组合树,并给出每个叶子的基数。
VIEW.LIST视图在发起端 O(视图数量)kevy 独有列出已声明的视图及其模式与形状。
VIEW.QUERY视图virtual:O(log N_order + candidates * l…kevy 独有按视图的既定顺序翻页取出成员,可通过 VIA 模板顺带把字段取回来。
VIEW.REBUILD视图仅对 materialized 视图有效kevy 独有强制重建一个 materialized 视图。
VIEW.VERIFY视图materialized:O(M)kevy 独有校验视图,报告成员数与字节数的统计。
FEED.READ变更流只涉及单个 shard(shard 是参数,不是扇出)kevy 独有从某个 shard 读取变更 feed 的帧,起点是给定的 generation / offset 游标。
FEED.SHARDS变更流O(1),本地应答kevy 独有返回变更 feed 的 shard 数量。
FEED.TAIL变更流单个 shard 上 O(1)kevy 独有返回某个 shard 当前的 feed generation 与下一个 offset。
PREFIX.DIGEST迁移每个 shard 上遍历 O(该 shard 上的 key 数),再加上 O…kevy 独有对某个前缀下的行做一个与顺序无关的校验和,用于迁移核对。
PREFIX.STATS迁移O(该 shard 上的 key 数)kevy 独有报告某个 key 前缀的 key 数量与字节数统计。