This page lists the commands from the [official Redis command library](https://redis.io/commands/) that Memorystore for Redis [supports](https://docs.cloud.google.com/memorystore/docs/redis/supported-commands.md.txt#supported-commands) and the commands that it [blocks](https://docs.cloud.google.com/memorystore/docs/redis/supported-commands.md.txt#blocked-commands).

## Supported commands

Memorystore for Redis supports the following commands:

- `APPEND`
- `ASKING`
- `AUTH`
- `BITCOUNT`
- `BITFIELD`
- `BITFIELD_RO`
- `BITOP`
- `BITPOS`
- `BLMOVE`
- `BLMPOP`
- `BLPOP`
- `BRPOP`
- `BRPOPLPUSH`
- `BZMPOP`
- `BZPOPMAX`
- `BZPOPMIN`
- `CLIENT` \| `CACHING`
- `CLIENT` \| `GETNAME`
- `CLIENT` \| `GETREDIR`
- `CLIENT` \| `HELP`
- `CLIENT` \| `ID`
- `CLIENT` \| `INFO`
- `CLIENT` \| `KILL`
- `CLIENT` \| `LIST`
- `CLIENT` \| `NO-TOUCH`
- `CLIENT` \| `REPLY`
- `CLIENT` \| `SETNAME`
- `CLIENT` \| `TRACKING`
- `CLIENT` \| `TRACKINGINFO`

  Memorystore for Redis supports this `CLIENT` command group only for Redis
  versions 6.x and later.
- `COPY`

- `DBSIZE`

- `DECR`

- `DECRBY`

- `DEL`

- `DISCARD`

- `DUMP`

- `ECHO`

- `EVAL`

- `EVAL_RO`

- `EVALSHA`

- `EVALSHA_RO`

- `EXEC`

- `EXISTS`

- `EXPIRE`

- `EXPIREAT`

- `EXPIRETIME`

- `FCALL`

- `FCALL_RO`

- `FLUSHALL`

- `FLUSHDB`

- `FUNCTION` \| `DELETE`

- `FUNCTION` \| `DUMP`

- `FUNCTION` \| `FLUSH`

- `FUNCTION` \| `HELP`

- `FUNCTION` \| `KILL`

- `FUNCTION` \| `LIST`

- `FUNCTION` \| `LOAD`

- `FUNCTION` \| `RESTORE`

- `FUNCTION` \| `STATS`

- `GEOADD`

- `GEODIST`

- `GEOHASH`

- `GEOPOS`

- `GEORADIUS`

- `GEORADIUS_RO`

- `GEORADIUSBYMEMBER`

- `GEORADIUSBYMEMBER_RO`

- `GEOSEARCH`

- `GEOSEARCHSTORE`

- `GET`

- `GETBIT`

- `GETDEL`

- `GETEX`

- `GETRANGE`

- `GETSET`

- `HDEL`

- `HELLO`

- `HEXISTS`

- `HGET`

- `HGETALL`

- `HINCRBY`

- `HINCRBYFLOAT`

- `HKEYS`

- `HLEN`

- `HMGET`

- `HMSET`

- `HRANDFIELD`

- `HSCAN`

- `HSET`

- `HSETNX`

- `HSTRLEN`

- `HVALS`

- `INCR`

- `INCRBY`

- `INCRBYFLOAT`

- `INFO`

- `KEYS`

- `LATENCY` \| `DOCTOR`

- `LATENCY` \| `GRAPH`

- `LATENCY` \| `HELP`

- `LATENCY` \| `HISTOGRAM`

- `LATENCY` \| `HISTORY`

- `LATENCY` \| `LATEST`

- `LATENCY` \| `RESET`

  The `LATENCY` command group isn't blocked. However, Memorystore for Redis
  doesn't support setting the `latency-monitor-threshold` parameter. Therefore,
  the `LATENCY` commands don't return relevant information for this parameter.
- `LCS`

- `LINDEX`

- `LINSERT`

- `LLEN`

- `LMOVE`

- `LMPOP`

- `LOLWUT`

- `LPOP`

- `LPOS`

- `LPUSH`

- `LPUSHX`

- `LRANGE`

- `LREM`

- `LSET`

- `LTRIM`

- `MEMORY` \| `DOCTOR`

- `MEMORY` \| `HELP`

- `MEMORY` \| `MALLOC-STATS`

- `MEMORY` \| `PURGE`

- `MEMORY` \| `STATS`

- `MEMORY` \| `USAGE`

- `MGET`

- `MODULE` \| `HELP`

- `MONITOR`

- `MSET`

- `MSETNX`

- `MULTI`

- `PERSIST`

- `PEXPIRE`

- `PEXPIREAT`

- `PEXPIRETIME`

- `PFADD`

- `PFCOUNT`

- `PFMERGE`

- `PING`

- `PSETEX`

- `PSUBSCRIBE`

- `PTTL`

- `PUBLISH`

- `PUBSUB` \| `CHANNELS`

- `PUBSUB` \| `HELP`

- `PUBSUB` \| `NUMPAT`

- `PUBSUB` \| `NUMSUB`

- `PUBSUB` \| `SHARDCHANNELS`

- `PUBSUB` \| `SHARDNUMSUB`

- `PUNSUBSCRIBE`

- `QUIT`

- `RANDOMKEY`

- `READONLY`

- `READWRITE`

- `RENAME`

- `RENAMENX`

- `RESET`

- `RESTORE`

- `ROLE`

- `RPOP`

- `RPOPLPUSH`

- `RPUSH`

- `RPUSHX`

- `SADD`

- `SCAN`

- `SCARD`

- `SCRIPT` \| `DEBUG`

- `SCRIPT` \| `EXISTS`

- `SCRIPT` \| `FLUSH`

- `SCRIPT` \| `HELP`

- `SCRIPT` \| `KILL`

- `SCRIPT` \| `LOAD`

- `SDIFF`

- `SDIFFSTORE`

- `SELECT`

- `SET`

- `SETBIT`

- `SETEX`

- `SETNX`

- `SETRANGE`

- `SINTER`

- `SINTERCARD`

- `SINTERSTORE`

- `SISMEMBER`

- `SLOWLOG` \| `GET`

- `SLOWLOG` \| `HELP`

- `SLOWLOG` \| `LEN`

- `SLOWLOG` \| `RESET`

- `SMEMBERS`

- `SMISMEMBER`

- `SMOVE`

- `SORT`

- `SORT_RO`

- `SPOP`

- `SPUBLISH`

- `SRANDMEMBER`

- `SREM`

- `SSCAN`

- `SSUBSCRIBE`

- `STRLEN`

- `SUBSCRIBE`

- `SUBSTR`

- `SUNION`

- `SUNIONSTORE`

- `SUNSUBSCRIBE`

- `TIME`

- `TOUCH`

- `TTL`

- `TYPE`

- `UNLINK`

- `UNSUBSCRIBE`

- `UNWATCH`

- `WAIT`

- `WATCH`

- `XACK`

- `XADD`

- `XAUTOCLAIM`

- `XCLAIM`

- `XDEL`

- `XGROUP` \| `CREATE`

- `XGROUP` \| `CREATECONSUMER`

- `XGROUP` \| `DELCONSUMER`

- `XGROUP` \| `DESTROY`

- `XGROUP` \| `HELP`

- `XGROUP` \| `SETID`

- `XINFO` \| `CONSUMERS`

- `XINFO` \| `GROUPS`

- `XINFO` \| `HELP`

- `XINFO` \| `STREAM`

- `XLEN`

- `XPENDING`

- `XRANGE`

- `XREAD`

- `XREADGROUP`

- `XREVRANGE`

- `XTRIM`

- `ZADD`

- `ZCARD`

- `ZCOUNT`

- `ZDIFF`

- `ZDIFFSTORE`

- `ZINCRBY`

- `ZINTER`

- `ZINTERCARD`

- `ZINTERSTORE`

- `ZLEXCOUNT`

- `ZMPOP`

- `ZMSCORE`

- `ZPOPMAX`

- `ZPOPMIN`

- `ZRANDMEMBER`

- `ZRANGE`

- `ZRANGEBYLEX`

- `ZRANGEBYSCORE`

- `ZRANGESTORE`

- `ZRANK`

- `ZREM`

- `ZREMRANGEBYLEX`

- `ZREMRANGEBYRANK`

- `ZREMRANGEBYSCORE`

- `ZREVRANGE`

- `ZREVRANGEBYLEX`

- `ZREVRANGEBYSCORE`

- `ZREVRANK`

- `ZSCAN`

- `ZSCORE`

- `ZUNION`

- `ZUNIONSTORE`

## Blocked commands

Memorystore for Redis supports all Redis 7.2 commands, except for the
commands that are listed in this section. For these blocked commands,
Memorystore for Redis returns a `NOPERM` error.

- `ACL` \| `CAT`
- `ACL` \| `DELUSER`
- `ACL` \| `GENPASS`
- `ACL` \| `GETUSER`
- `ACL` \| `HELP`
- `ACL` \| `LIST`
- `ACL` \| `LOAD`
- `ACL` \| `LOG`
- `ACL` \| `SAVE`
- `ACL` \| `SETUSER`
- `ACL` \| `USERS`
- `ACL` \| `WHOAMI`
- `ACL` \| `CAT`
- `ACL` \| `GENPASS`
- `ACL` \| `HELP`
- `ACL` \| `WHOAMI`
- `BGREWRITEAOF`
- `BGSAVE`
- `CLIENT` \| `NO-EVICT`
- `CLIENT` \| `PAUSE`
- `CLIENT` \| `SETINFO`
- `CLIENT` \| `UNBLOCK`
- `CLIENT` \| `UNPAUSE`
- `CLUSTER`
- `COMMAND`
- `CONFIG`

  Memorystore for Redis blocks the `CONFIG` command, which stops you from
  modifying the `redis.conf` file for your Redis server. However, you can use
  the [gcloud CLI](https://docs.cloud.google.com/sdk/gcloud.md.txt) to modify a defined set of
  supported Redis configurations. For more information, see [Supported Redis configurations](https://docs.cloud.google.com/memorystore/docs/redis/supported-redis-configurations.md.txt).
- `DEBUG`

- `LASTSAVE`

- `MIGRATE`

- `OBJECT`

- `REPLICAOF`

- `SAVE`

- `SHUTDOWN`