From 899e16c3e91b22844bea738d5d3669d4ab4265c3 Mon Sep 17 00:00:00 2001 From: Kacy Fortner Date: Thu, 26 Feb 2026 22:49:35 -0500 Subject: [PATCH] =?UTF-8?q?style:=20cargo=20fmt=20=E2=80=94=20fix=20format?= =?UTF-8?q?ting=20from=20pr=20#331?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/ember-core/src/keyspace/hash.rs | 7 +- crates/ember-core/src/shard/mod.rs | 14 +- crates/ember-server/src/connection/execute.rs | 1383 +++++++++++++++-- 3 files changed, 1242 insertions(+), 162 deletions(-) diff --git a/crates/ember-core/src/keyspace/hash.rs b/crates/ember-core/src/keyspace/hash.rs index b2839eb8..5d59ffca 100644 --- a/crates/ember-core/src/keyspace/hash.rs +++ b/crates/ember-core/src/keyspace/hash.rs @@ -217,7 +217,12 @@ impl Keyspace { /// If the field doesn't exist, it is created with the increment as its value. /// The stored value must be a valid float or the call returns an error. /// Returns the new value as a formatted string. - pub fn hincrbyfloat(&mut self, key: &str, field: &str, delta: f64) -> Result { + pub fn hincrbyfloat( + &mut self, + key: &str, + field: &str, + delta: f64, + ) -> Result { self.remove_if_expired(key); let is_new = match self.entries.get(key) { diff --git a/crates/ember-core/src/shard/mod.rs b/crates/ember-core/src/shard/mod.rs index 9fbcb81c..430fd584 100644 --- a/crates/ember-core/src/shard/mod.rs +++ b/crates/ember-core/src/shard/mod.rs @@ -2059,12 +2059,14 @@ fn dispatch( Err(_) => ShardResponse::WrongType, }, ShardRequest::HIncrBy { key, field, delta } => incr_result(ks.hincrby(key, field, *delta)), - ShardRequest::HIncrByFloat { key, field, delta } => match ks.hincrbyfloat(key, field, *delta) { - Ok(val) => ShardResponse::BulkString(val), - Err(IncrFloatError::WrongType) => ShardResponse::WrongType, - Err(IncrFloatError::OutOfMemory) => ShardResponse::OutOfMemory, - Err(e) => ShardResponse::Err(e.to_string()), - }, + ShardRequest::HIncrByFloat { key, field, delta } => { + match ks.hincrbyfloat(key, field, *delta) { + Ok(val) => ShardResponse::BulkString(val), + Err(IncrFloatError::WrongType) => ShardResponse::WrongType, + Err(IncrFloatError::OutOfMemory) => ShardResponse::OutOfMemory, + Err(e) => ShardResponse::Err(e.to_string()), + } + } ShardRequest::HKeys { key } => match ks.hkeys(key) { Ok(keys) => ShardResponse::StringArray(keys), Err(_) => ShardResponse::WrongType, diff --git a/crates/ember-server/src/connection/execute.rs b/crates/ember-server/src/connection/execute.rs index f21d407b..596ddda9 100644 --- a/crates/ember-server/src/connection/execute.rs +++ b/crates/ember-server/src/connection/execute.rs @@ -2376,7 +2376,10 @@ pub(super) async fn execute( Command::ZDiffStore { dest, keys } => { let idx = engine.shard_for_key(&dest); - let req = ShardRequest::ZDiffStore { dest: dest.clone(), keys }; + let req = ShardRequest::ZDiffStore { + dest: dest.clone(), + keys, + }; match engine.send_to_shard(idx, req).await { Ok(ShardResponse::ZStoreResult { count, .. }) => { notify_write( @@ -2396,7 +2399,10 @@ pub(super) async fn execute( Command::ZInterStore { dest, keys } => { let idx = engine.shard_for_key(&dest); - let req = ShardRequest::ZInterStore { dest: dest.clone(), keys }; + let req = ShardRequest::ZInterStore { + dest: dest.clone(), + keys, + }; match engine.send_to_shard(idx, req).await { Ok(ShardResponse::ZStoreResult { count, .. }) => { notify_write( @@ -2416,7 +2422,10 @@ pub(super) async fn execute( Command::ZUnionStore { dest, keys } => { let idx = engine.shard_for_key(&dest); - let req = ShardRequest::ZUnionStore { dest: dest.clone(), keys }; + let req = ShardRequest::ZUnionStore { + dest: dest.clone(), + keys, + }; match engine.send_to_shard(idx, req).await { Ok(ShardResponse::ZStoreResult { count, .. }) => { notify_write( @@ -3754,158 +3763,1222 @@ struct CommandEntry { /// Static command table. Arity: positive = exact, negative = minimum. /// Flags: write, readonly, denyoom, admin, pubsub, noscript, fast, loading, etc. static COMMAND_TABLE: &[CommandEntry] = &[ - CommandEntry { name: "APPEND", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "AUTH", arity: -2, flags: &["noscript", "loading", "fast", "no_auth"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "BGREWRITEAOF", arity: 1, flags: &["admin"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "BGSAVE", arity: -1, flags: &["admin"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "BITCOUNT", arity: -2, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "BITOP", arity: -4, flags: &["write", "denyoom"], first_key: 2, last_key: -1, step: 1 }, - CommandEntry { name: "BITPOS", arity: -3, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "BLPOP", arity: -3, flags: &["write", "noscript"], first_key: 1, last_key: -2, step: 1 }, - CommandEntry { name: "BRPOP", arity: -3, flags: &["write", "noscript"], first_key: 1, last_key: -2, step: 1 }, - CommandEntry { name: "CLIENT", arity: -2, flags: &["admin", "noscript", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "CLUSTER", arity: -2, flags: &["admin"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "COMMAND", arity: -1, flags: &["loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "CONFIG", arity: -2, flags: &["admin", "loading", "noscript"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "COPY", arity: -3, flags: &["write"], first_key: 1, last_key: 2, step: 1 }, - CommandEntry { name: "DBSIZE", arity: 1, flags: &["readonly", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "DECR", arity: 2, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "DECRBY", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "DEL", arity: -2, flags: &["write"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "DISCARD", arity: 1, flags: &["noscript", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "ECHO", arity: 2, flags: &["fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "EXEC", arity: 1, flags: &["noscript", "loading"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "EXISTS", arity: -2, flags: &["readonly", "fast"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "EXPIRE", arity: 3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "EXPIREAT", arity: 3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "EXPIRETIME", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "FLUSHALL", arity: -1, flags: &["write"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "FLUSHDB", arity: -1, flags: &["write"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "GET", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "GETBIT", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "GETDEL", arity: 2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "GETEX", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "GETRANGE", arity: 4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "GETSET", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HDEL", arity: -3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HEXISTS", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HGET", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HGETALL", arity: 2, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HINCRBY", arity: 4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HINCRBYFLOAT", arity: 4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HKEYS", arity: 2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HLEN", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HMGET", arity: -3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HMSET", arity: -4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HRANDFIELD", arity: -2, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HSCAN", arity: -3, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HSET", arity: -4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "HVALS", arity: 2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "INCR", arity: 2, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "INCRBY", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "INCRBYFLOAT", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "INFO", arity: -1, flags: &["loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "KEYS", arity: 2, flags: &["readonly", "sort_for_script"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "LASTSAVE", arity: 1, flags: &["random", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "LINDEX", arity: 3, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LINSERT", arity: 5, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LLEN", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LMOVE", arity: 5, flags: &["write", "denyoom"], first_key: 1, last_key: 2, step: 1 }, - CommandEntry { name: "LMPOP", arity: -4, flags: &["write", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "LPOS", arity: -3, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LPOP", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LPUSH", arity: -3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LPUSHX", arity: -3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LRANGE", arity: 4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LREM", arity: 4, flags: &["write"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LSET", arity: 4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "LTRIM", arity: 4, flags: &["write"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "MEMORY", arity: -2, flags: &["readonly"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "MGET", arity: -2, flags: &["readonly", "fast"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "MIGRATE", arity: -6, flags: &["write"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "MONITOR", arity: 1, flags: &["admin", "loading"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "MSET", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: -1, step: 2 }, - CommandEntry { name: "MSETNX", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: -1, step: 2 }, - CommandEntry { name: "MULTI", arity: 1, flags: &["noscript", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "OBJECT", arity: -2, flags: &["slow"], first_key: 2, last_key: 2, step: 1 }, - CommandEntry { name: "PERSIST", arity: 2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PEXPIRE", arity: 3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PEXPIREAT", arity: 3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PEXPIRETIME", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PING", arity: -1, flags: &["fast", "loading"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "PSETEX", arity: 4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PSUBSCRIBE", arity: -2, flags: &["pubsub", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "PTTL", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "PUBLISH", arity: 3, flags: &["pubsub", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "PUBSUB", arity: -2, flags: &["pubsub", "random", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "PUNSUBSCRIBE", arity: -1, flags: &["pubsub", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "QUIT", arity: 1, flags: &["fast", "loading"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "RANDOMKEY", arity: 1, flags: &["readonly", "random"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "RENAME", arity: 3, flags: &["write"], first_key: 1, last_key: 2, step: 1 }, - CommandEntry { name: "ROLE", arity: 1, flags: &["noscript", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "RPOP", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "RPUSH", arity: -3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "RPUSHX", arity: -3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SADD", arity: -3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SCAN", arity: -2, flags: &["readonly"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "SCARD", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SDIFF", arity: -2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "SDIFFSTORE", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "SET", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SETBIT", arity: 4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SETEX", arity: 4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SETNX", arity: 3, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SETRANGE", arity: 4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SINTER", arity: -2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "SINTERCARD", arity: -3, flags: &["readonly"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "SINTERSTORE", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "SISMEMBER", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SLOWLOG", arity: -2, flags: &["admin", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "SMEMBERS", arity: 2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SMISMEMBER", arity: -3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SMOVE", arity: 4, flags: &["write", "fast"], first_key: 1, last_key: 2, step: 1 }, - CommandEntry { name: "SORT", arity: -2, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SPOP", arity: -2, flags: &["write", "random", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SRANDMEMBER", arity: -2, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SREM", arity: -3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SSCAN", arity: -3, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "STRLEN", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "SUBSCRIBE", arity: -2, flags: &["pubsub", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "SUNION", arity: -2, flags: &["readonly", "sort_for_script"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "SUNIONSTORE", arity: -3, flags: &["write", "denyoom"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "TIME", arity: 1, flags: &["random", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "TOUCH", arity: -2, flags: &["readonly", "fast"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "TTL", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "TYPE", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "UNLINK", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "UNSUBSCRIBE", arity: -1, flags: &["pubsub", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "UNWATCH", arity: 1, flags: &["noscript", "loading", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "WAIT", arity: 3, flags: &["noscript"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "WATCH", arity: -2, flags: &["noscript", "loading", "fast"], first_key: 1, last_key: -1, step: 1 }, - CommandEntry { name: "ZADD", arity: -4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZCARD", arity: 2, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZCOUNT", arity: 4, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZDIFF", arity: -3, flags: &["readonly", "sort_for_script"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "ZDIFFSTORE", arity: -4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZINCRBY", arity: 4, flags: &["write", "denyoom", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZINTER", arity: -3, flags: &["readonly", "sort_for_script"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "ZINTERSTORE", arity: -4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZLEXCOUNT", arity: 4, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZMPOP", arity: -4, flags: &["write", "fast"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "ZPOPMAX", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZPOPMIN", arity: -2, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZRANDMEMBER", arity: -2, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZRANGE", arity: -4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZRANGEBYSCORE", arity: -4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZRANK", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZREM", arity: -3, flags: &["write", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZREVRANGE", arity: -4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZREVRANGEBYSCORE", arity: -4, flags: &["readonly"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZREVRANK", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZSCAN", arity: -3, flags: &["readonly", "random"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZSCORE", arity: 3, flags: &["readonly", "fast"], first_key: 1, last_key: 1, step: 1 }, - CommandEntry { name: "ZUNION", arity: -3, flags: &["readonly", "sort_for_script"], first_key: 0, last_key: 0, step: 0 }, - CommandEntry { name: "ZUNIONSTORE", arity: -4, flags: &["write", "denyoom"], first_key: 1, last_key: 1, step: 1 }, + CommandEntry { + name: "APPEND", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "AUTH", + arity: -2, + flags: &["noscript", "loading", "fast", "no_auth"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "BGREWRITEAOF", + arity: 1, + flags: &["admin"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "BGSAVE", + arity: -1, + flags: &["admin"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "BITCOUNT", + arity: -2, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "BITOP", + arity: -4, + flags: &["write", "denyoom"], + first_key: 2, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "BITPOS", + arity: -3, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "BLPOP", + arity: -3, + flags: &["write", "noscript"], + first_key: 1, + last_key: -2, + step: 1, + }, + CommandEntry { + name: "BRPOP", + arity: -3, + flags: &["write", "noscript"], + first_key: 1, + last_key: -2, + step: 1, + }, + CommandEntry { + name: "CLIENT", + arity: -2, + flags: &["admin", "noscript", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "CLUSTER", + arity: -2, + flags: &["admin"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "COMMAND", + arity: -1, + flags: &["loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "CONFIG", + arity: -2, + flags: &["admin", "loading", "noscript"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "COPY", + arity: -3, + flags: &["write"], + first_key: 1, + last_key: 2, + step: 1, + }, + CommandEntry { + name: "DBSIZE", + arity: 1, + flags: &["readonly", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "DECR", + arity: 2, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "DECRBY", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "DEL", + arity: -2, + flags: &["write"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "DISCARD", + arity: 1, + flags: &["noscript", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "ECHO", + arity: 2, + flags: &["fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "EXEC", + arity: 1, + flags: &["noscript", "loading"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "EXISTS", + arity: -2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "EXPIRE", + arity: 3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "EXPIREAT", + arity: 3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "EXPIRETIME", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "FLUSHALL", + arity: -1, + flags: &["write"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "FLUSHDB", + arity: -1, + flags: &["write"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "GET", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "GETBIT", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "GETDEL", + arity: 2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "GETEX", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "GETRANGE", + arity: 4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "GETSET", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HDEL", + arity: -3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HEXISTS", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HGET", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HGETALL", + arity: 2, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HINCRBY", + arity: 4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HINCRBYFLOAT", + arity: 4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HKEYS", + arity: 2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HLEN", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HMGET", + arity: -3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HMSET", + arity: -4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HRANDFIELD", + arity: -2, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HSCAN", + arity: -3, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HSET", + arity: -4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "HVALS", + arity: 2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "INCR", + arity: 2, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "INCRBY", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "INCRBYFLOAT", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "INFO", + arity: -1, + flags: &["loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "KEYS", + arity: 2, + flags: &["readonly", "sort_for_script"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "LASTSAVE", + arity: 1, + flags: &["random", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "LINDEX", + arity: 3, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LINSERT", + arity: 5, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LLEN", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LMOVE", + arity: 5, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 2, + step: 1, + }, + CommandEntry { + name: "LMPOP", + arity: -4, + flags: &["write", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "LPOS", + arity: -3, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LPOP", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LPUSH", + arity: -3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LPUSHX", + arity: -3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LRANGE", + arity: 4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LREM", + arity: 4, + flags: &["write"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LSET", + arity: 4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "LTRIM", + arity: 4, + flags: &["write"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "MEMORY", + arity: -2, + flags: &["readonly"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "MGET", + arity: -2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "MIGRATE", + arity: -6, + flags: &["write"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "MONITOR", + arity: 1, + flags: &["admin", "loading"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "MSET", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: -1, + step: 2, + }, + CommandEntry { + name: "MSETNX", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: -1, + step: 2, + }, + CommandEntry { + name: "MULTI", + arity: 1, + flags: &["noscript", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "OBJECT", + arity: -2, + flags: &["slow"], + first_key: 2, + last_key: 2, + step: 1, + }, + CommandEntry { + name: "PERSIST", + arity: 2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PEXPIRE", + arity: 3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PEXPIREAT", + arity: 3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PEXPIRETIME", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PING", + arity: -1, + flags: &["fast", "loading"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "PSETEX", + arity: 4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PSUBSCRIBE", + arity: -2, + flags: &["pubsub", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "PTTL", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "PUBLISH", + arity: 3, + flags: &["pubsub", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "PUBSUB", + arity: -2, + flags: &["pubsub", "random", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "PUNSUBSCRIBE", + arity: -1, + flags: &["pubsub", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "QUIT", + arity: 1, + flags: &["fast", "loading"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "RANDOMKEY", + arity: 1, + flags: &["readonly", "random"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "RENAME", + arity: 3, + flags: &["write"], + first_key: 1, + last_key: 2, + step: 1, + }, + CommandEntry { + name: "ROLE", + arity: 1, + flags: &["noscript", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "RPOP", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "RPUSH", + arity: -3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "RPUSHX", + arity: -3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SADD", + arity: -3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SCAN", + arity: -2, + flags: &["readonly"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "SCARD", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SDIFF", + arity: -2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "SDIFFSTORE", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "SET", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SETBIT", + arity: 4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SETEX", + arity: 4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SETNX", + arity: 3, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SETRANGE", + arity: 4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SINTER", + arity: -2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "SINTERCARD", + arity: -3, + flags: &["readonly"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "SINTERSTORE", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "SISMEMBER", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SLOWLOG", + arity: -2, + flags: &["admin", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "SMEMBERS", + arity: 2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SMISMEMBER", + arity: -3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SMOVE", + arity: 4, + flags: &["write", "fast"], + first_key: 1, + last_key: 2, + step: 1, + }, + CommandEntry { + name: "SORT", + arity: -2, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SPOP", + arity: -2, + flags: &["write", "random", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SRANDMEMBER", + arity: -2, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SREM", + arity: -3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SSCAN", + arity: -3, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "STRLEN", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "SUBSCRIBE", + arity: -2, + flags: &["pubsub", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "SUNION", + arity: -2, + flags: &["readonly", "sort_for_script"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "SUNIONSTORE", + arity: -3, + flags: &["write", "denyoom"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "TIME", + arity: 1, + flags: &["random", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "TOUCH", + arity: -2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "TTL", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "TYPE", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "UNLINK", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "UNSUBSCRIBE", + arity: -1, + flags: &["pubsub", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "UNWATCH", + arity: 1, + flags: &["noscript", "loading", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "WAIT", + arity: 3, + flags: &["noscript"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "WATCH", + arity: -2, + flags: &["noscript", "loading", "fast"], + first_key: 1, + last_key: -1, + step: 1, + }, + CommandEntry { + name: "ZADD", + arity: -4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZCARD", + arity: 2, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZCOUNT", + arity: 4, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZDIFF", + arity: -3, + flags: &["readonly", "sort_for_script"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "ZDIFFSTORE", + arity: -4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZINCRBY", + arity: 4, + flags: &["write", "denyoom", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZINTER", + arity: -3, + flags: &["readonly", "sort_for_script"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "ZINTERSTORE", + arity: -4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZLEXCOUNT", + arity: 4, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZMPOP", + arity: -4, + flags: &["write", "fast"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "ZPOPMAX", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZPOPMIN", + arity: -2, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZRANDMEMBER", + arity: -2, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZRANGE", + arity: -4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZRANGEBYSCORE", + arity: -4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZRANK", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZREM", + arity: -3, + flags: &["write", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZREVRANGE", + arity: -4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZREVRANGEBYSCORE", + arity: -4, + flags: &["readonly"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZREVRANK", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZSCAN", + arity: -3, + flags: &["readonly", "random"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZSCORE", + arity: 3, + flags: &["readonly", "fast"], + first_key: 1, + last_key: 1, + step: 1, + }, + CommandEntry { + name: "ZUNION", + arity: -3, + flags: &["readonly", "sort_for_script"], + first_key: 0, + last_key: 0, + step: 0, + }, + CommandEntry { + name: "ZUNIONSTORE", + arity: -4, + flags: &["write", "denyoom"], + first_key: 1, + last_key: 1, + step: 1, + }, ]; /// Implements the WAIT command: blocks until `needed` replicas have