redis 所有常用命令,整理在一起了方便拿取,并配上了思维导图
一、键(Key)相关命令
这些命令用于管理键本身,与键的数据类型无关。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
DEL | DEL key [key …] | 删除一个或多个键。返回被删除键的数量。 | DEL name age |
EXISTS | EXISTS key [key …] | 检查一个或多个键是否存在。返回存在的数量。 | EXISTS name |
EXPIRE | EXPIRE key seconds | 为键设置生存时间(秒),超时后自动删除。 | EXPIRE session:123 3600 |
PEXPIRE | PEXPIRE key milliseconds | 类似 EXPIRE,但时间单位为毫秒。 | PEXPIRE temp_key 5000 |
TTL | TTL key | 查看键的剩余生存时间(秒)。-2=键不存在,-1=键无过期时间。 | TTL session:123 |
PTTL | PTTL key | 类似 TTL,但返回毫秒。 | PTTL session:123 |
PERSIST | PERSIST key | 移除键的过期时间,使其成为永久键。 | PERSIST session:123 |
KEYS | KEYS pattern | (生产环境慎用) 查找所有符合给定模式 pattern 的键。 | KEYS user:* |
SCAN | SCAN cursor [MATCH pattern] [COUNT count] | (安全推荐) 增量式迭代键,避免 KEYS 命令造成的阻塞。 | SCAN 0 MATCH user:* COUNT 10 |
RENAME | RENAME key newkey | 将键重命名。如果 newkey 已存在,则会被覆盖。 | RENAME old_name new_name |
RENAMENX | RENAMENX key newkey | 仅当 newkey 不存在时,将 key 改名为 newkey。 | RENAMENX old_name new_name |
TYPE | TYPE key | 返回键所存储的值的类型。 | TYPE mylist |
DUMP | DUMP key | 序列化给定键,并返回被序列化的值。 | |
RESTORE | RESTORE key ttl serialized-value | 反序列化 DUMP 命令序列化的值,并将其与键关联。 | |
RANDOMKEY | RANDOMKEY | 从当前数据库中随机返回一个键。 | |
MOVE | MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 中。 |
二、字符串(String)相关命令
字符串是 Redis 最基本的数据类型,可以包含任何数据,如文本、数字(整数/浮点数)或二进制数据。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
SET | SET key value [EX seconds | PX ms | NX |
GET | GET key | 获取指定键的值。 | GET name |
MSET | MSET key value [key value …] | 同时设置一个或多个键值对。 | MSET k1 v1 k2 v2 |
MGET | MGET key [key …] | 获取所有给定键的值。 | MGET k1 k2 |
SETNX | SETNX key value | (SET if Not eXists) 只有在键 key 不存在的情况下才设置值。是 SET key value NX 的旧式写法。 | SETNX lock_key 1 |
SETEX | SETEX key seconds value | 设置值并同时指定过期时间(秒)。是 SET key value EX seconds 的旧式写法。 | SETEX session_id 3600 “sess_data” |
PSETEX | PSETEX key milliseconds value | 类似 SETEX,但时间单位为毫秒。 | PSETEX temp_key 5000 “temp” |
GETSET | GETSET key value | 设置新值并返回旧值。 | GETSET counter 0 |
INCR | INCR key | 将键中储存的数字值增一。如果键不存在,会先初始化为0再执行。 | INCR page_views |
DECR | DECR key | 将键中储存的数字值减一。 | DECR inventory |
INCRBY | INCRBY key increment | 将键所储存的值加上给定的增量值。 | INCRBY counter 5 |
DECRBY | DECRBY key decrement | 将键所储存的值减去给定的减量值。 | DECRBY inventory 3 |
INCRBYFLOAT | INCRBYFLOAT key increment | 将键所储存的值加上给定的浮点数增量值。 | INCRBYFLOAT price 2.5 |
APPEND | APPEND key value | 如果键 key 已经存在并且是一个字符串,将 value 追加到原有值的末尾。 | APPEND msg " world" |
STRLEN | STRLEN key | 返回键所储存的字符串值的长度。 | STRLEN name |
GETRANGE | GETRANGE key start end | 返回键中字符串值的子字符串,由 start 和 end 偏移量决定(闭区间)。 | GETRANGE name 0 3 |
SETRANGE | SETRANGE key offset value | 用 value 参数覆写键所储存的字符串值,从偏移量 offset 开始。 | SETRANGE greeting 6 “Redis” |
三、哈希(Hash)相关命令
哈希是键值对集合,非常适合存储对象(如用户信息)。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
HSET | HSET key field value [field value …] | 为哈希表中的字段赋值。可以设置多个。 | HSET user:1000 name “Alice” age 30 |
HGET | HGET key field | 获取哈希表中指定字段的值。 | HGET user:1000 name |
HMSET | HMSET key field value [field value …] | (已弃用,建议用 HSET) 同时将多个 field-value 对设置到哈希表中。 | HMSET user:1000 name “Alice” age 30 |
HMGET | HMGET key field [field …] | 获取哈希表中所有给定字段的值。 | HMGET user:1000 name age |
HGETALL | HGETALL key | 获取哈希表中所有的字段和值。 | HGETALL user:1000 |
HDEL | HDEL key field [field …] | 删除哈希表中的一个或多个指定字段。 | HDEL user:1000 age |
HEXISTS | HEXISTS key field | 查看哈希表中,指定的字段是否存在。 | HEXISTS user:1000 name |
HKEYS | HKEYS key | 获取哈希表中的所有字段名。 | HKEYS user:1000 |
HVALS | HVALS key | 获取哈希表中的所有值。 | HVALS user:1000 |
HLEN | HLEN key | 获取哈希表中字段的数量。 | HLEN user:1000 |
HINCRBY | HINCRBY key field increment | 为哈希表中的字段值加上整型增量。 | HINCRBY user:1000 score 5 |
HINCRBYFLOAT | HINCRBYFLOAT key field increment | 为哈希表中的字段值加上浮点数增量。 | HINCRBYFLOAT user:1000 height 0.5 |
HSCAN | HSCAN key cursor [MATCH pattern] [COUNT count] | 增量式迭代哈希表中的键值对。 | HSCAN user:1000 0 MATCH n* |
HSETNX | HSETNX key field value | 只有在字段 field 不存在时,才设置哈希表字段的值。 | HSETNX user:1000 email “a@b.com” |
四、列表(List)相关命令
列表是简单的字符串列表,按照插入顺序排序。你可以从列表的头部或尾部添加/移除元素。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
LPUSH | LPUSH key element [element …] | 将一个或多个值插入到列表的头部(左边)。 | LPUSH mylist “world” “hello” |
RPUSH | RPUSH key element [element …] | 将一个或多个值插入到列表的尾部(右边)。 | RPUSH mylist “world” |
LPOP | LPOP key [count] | 移除并返回列表头部的第一个元素。 | LPOP mylist |
RPOP | RPOP key [count] | 移除并返回列表尾部的第一个元素。 | RPOP mylist |
LRANGE | LRANGE key start stop | 返回列表中指定区间内的元素,基于0的索引,-1 表示最后一个元素。 | LRANGE mylist 0 -1 |
LLEN | LLEN key | 获取列表的长度。 | LLEN mylist |
LINDEX | LINDEX key index | 通过索引获取列表中的元素。 | LINDEX mylist 1 |
LSET | LSET key index element | 通过索引来设置元素的值。 | LSET mylist 1 “new_value” |
LINSERT | LINSERT key BEFORE | AFTER pivot element | 在列表的元素 pivot 的前或后插入元素。 |
LREM | LREM key count element | 根据参数 count 的值,移除列表中与参数 element 相等的元素。 count > 0: 从表头开始移除 count 个。 count < 0: 从表尾开始移除 abs(count) 个。 count = 0: 移除所有。 | LREM mylist 1 “hello” |
LTRIM | LTRIM key start stop | 对一个列表进行修剪,只保留指定区间内的元素。 | LTRIM mylist 1 3 |
RPOPLPUSH | RPOPLPUSH source destination | 将 source 列表的最后一个元素弹出并返回,同时将该元素 LPUSH 到 destination 列表。 | RPOPLPUSH list1 list2 |
BLPOP | BLPOP key [key …] timeout | 阻塞版 LPOP。如果列表为空,命令会阻塞连接直到超时或有元素可弹出。 | BLPOP mylist 30 |
BRPOP | BRPOP key [key …] timeout | 阻塞版 RPOP。 | BRPOP mylist 30 |
五、集合(Set)相关命令
集合是 String 类型的无序集合,集合成员是唯一的,不允许重复。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
SADD | SADD key member [member …] | 向集合添加一个或多个成员。 | SADD tags redis db |
SREM | SREM key member [member …] | 移除集合中一个或多个成员。 | SREM tags db |
SMEMBERS | SMEMBERS key | 返回集合中的所有成员。 | SMEMBERS tags |
SISMEMBER | SISMEMBER key member | 判断 member 元素是否是集合 key 的成员。 | SISMEMBER tags redis |
SCARD | SCARD key | 获取集合的成员数。 | SCARD tags |
SRANDMEMBER | SRANDMEMBER key [count] | 随机返回集合中一个或多个成员,但不移除。 | SRANDMEMBER tags 2 |
SPOP | SPOP key [count] | 移除并返回集合中的一个或多个随机成员。 | SPOP tags 1 |
SINTER | SINTER key [key …] | 返回多个集合的交集。 | SINTER set1 set2 |
SUNION | SUNION key [key …] | 返回多个集合的并集。 | SUNION set1 set2 |
SDIFF | SDIFF key [key …] | 返回第一个集合与其他集合之间的差集。 | SDIFF set1 set2 |
SINTERSTORE | SINTERSTORE destination key [key …] | 将交集结果存入 destination 集合。 | SINTERSTORE new_set set1 set2 |
SUNIONSTORE | SUNIONSTORE destination key [key …] | 将并集结果存入 destination 集合。 | SUNIONSTORE new_set set1 set2 |
SDIFFSTORE | SDIFFSTORE destination key [key …] | 将差集结果存入 destination 集合。 | SDIFFSTORE new_set set1 set2 |
SMOVE | SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合。 | SMOVE set1 set2 “foo” |
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 增量式迭代集合中的元素。 | SSCAN tags 0 MATCH r* |
六、有序集合(Sorted Set / ZSet)相关命令
有序集合与集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数(score)。Redis 正是通过分数来为集合中的成员进行从小到大的排序。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
ZADD | ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member …] |
ZREM | ZREM key member [member …] | 移除有序集合中的一个或多个成员。 | ZREM leaderboard “Bob” |
ZRANGE | ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合指定区间内的成员(低到高)。 | ZRANGE leaderboard 0 -1 WITHSCORES |
ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 返回有序集合指定区间内的成员(高到低)。 | ZREVRANGE leaderboard 0 5 |
ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集合中指定分数区间的成员(低到高)。 | ZRANGEBYSCORE leaderboard 90 100 |
ZREVRANGEBYSCORE | ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集合中指定分数区间的成员(高到低)。 | ZREVRANGEBYSCORE leaderboard 100 90 |
ZINCRBY | ZINCRBY key increment member | 增加有序集合中成员的分数。 | ZINCRBY leaderboard 5 “Alice” |
ZCARD | ZCARD key | 获取有序集合的成员数。 | ZCARD leaderboard |
ZCOUNT | ZCOUNT key min max | 计算在有序集合中指定分数区间内的成员数量。 | ZCOUNT leaderboard 90 100 |
ZSCORE | ZSCORE key member | 返回有序集合中成员的分数值。 | ZSCORE leaderboard “Alice” |
ZRANK | ZRANK key member | 返回有序集合中指定成员的排名(从0开始,按分数升序)。 | ZRANK leaderboard “Alice” |
ZREVRANK | ZREVRANK key member | 返回有序集合中指定成员的排名(按分数降序)。 | ZREVRANK leaderboard “Alice” |
ZREM | ZREM key member [member …] | 移除有序集合中的一个或多个成员。 | ZREM leaderboard “Bob” |
ZREMRANGEBYRANK | ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员。 | ZREMRANGEBYRANK leaderboard 0 2 |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员。 | ZREMRANGEBYSCORE leaderboard -inf 80 |
ZINTERSTORE / ZUNIONSTORE | ZINTERSTORE | ZUNIONSTORE dest numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM | MIN |
七、HyperLogLog 相关命令
用于做基数统计(估算集合中不重复元素的数量)的算法,优点是占用内存极小。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
PFADD | PFADD key element [element …] | 添加指定元素到 HyperLogLog 中。 | PFADD hll_user_ips “192.168.1.1” |
PFCOUNT | PFCOUNT key [key …] | 返回给定 HyperLogLog 的基数估算值。 | PFCOUNT hll_user_ips |
PFMERGE | PFMERGE destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并为一个。 | PFMERGE hll_total hll_day1 hll_day2 |
八、地理空间(Geospatial)相关命令
用于存储和操作地理位置信息,如经纬度、计算距离等。
命令 | 语法 | 描述 | 示例 |
---|---|---|---|
GEOADD | GEOADD key [NX | XX] longitude latitude member [longitude latitude member …] | 将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中。 |
GEOPOS | GEOPOS key member [member …] | 从 key 里返回所有指定成员的位置(经度和纬度)。 | GEOPOS cities “Beijing” |
GEODIST | GEODIST key member1 member2 [m | km | ft |
GEORADIUS | GEORADIUS key longitude latitude radius m | km | ft |
GEORADIUSBYMEMBER | GEORADIUSBYMEMBER key member radius m | km | ft |
GEOHASH | GEOHASH key member [member …] | 返回一个或多个位置元素的 Geohash 表示。 | GEOHASH cities “Beijing” |
九、流(Stream)相关命令(Redis 5.0+)
Stream 是 Redis 5.0 引入的新的数据类型,它是一个更强大的、可用于实现消息队列的、支持多消费者的抽象日志数据类型。
命令 | 语法 | 描述 |
---|---|---|
XADD | XADD key [NOMKSTREAM] [MAXLEN | MINID] id field value [field value …] |
XLEN | XLEN key | 获取流中消息的长度。 |
XRANGE | XRANGE key start end [COUNT count] | 返回流中 ID 在给定区间的消息。- 和 + 表示最小和最大 ID。 |
XREVRANGE | XREVRANGE key end start [COUNT count] | 逆序返回流中 ID 在给定区间的消息。 |
XREAD | XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] id [id …] | 从一个或多个流中读取消息,可阻塞。$ 表示只读取新消息。 |
XGROUP CREATE | XGROUP CREATE key groupname id | $ [MKSTREAM] |
XREADGROUP | XREADGROUP GROUP group consumer [COUNT count] [BLOCK ms] [NOACK] STREAMS key [key …] id [id …] | 通过消费者组读取消息。> 表示从未传递给其他消费者的消息开始读。 |
XACK | XACK key groupname id [id …] | 将消息标记为“已处理”。 |
XPENDING | XPENDING key groupname | 检查待处理消息列表。 |
十、服务器与连接管理命令
这些命令用于管理 Redis 服务器和客户端连接。
命令 | 语法 | 描述 |
---|---|---|
PING | PING [message] | 测试连接是否存活。如果连接正常则返回 PONG。 |
ECHO | ECHO message | 打印给定的字符串。 |
SELECT | SELECT index | 切换到指定的数据库(0-15)。 |
AUTH | AUTH [username] password | 验证密码。如果设置了用户名,则需要同时提供。 |
QUIT | QUIT | 关闭当前连接。 |
INFO | INFO [section] | 获取 Redis 服务器的各种信息和统计。INFO stats,INFO memory。 |
CLIENT LIST | CLIENT LIST | 获取连接到服务器的客户端列表。 |
CLIENT KILL | CLIENT KILL ip:port | 关闭指定的客户端连接。 |
CONFIG GET | CONFIG GET parameter | 获取 Redis 服务器的配置参数。 |
CONFIG SET | CONFIG SET parameter value | (慎用) 动态修改 Redis 服务器的配置参数。 |
DBSIZE | DBSIZE | 返回当前数据库的 key 的数量。 |
BGSAVE | BGSAVE [SCHEDULE] | 在后台异步保存当前数据库的数据到磁盘(生成 RDB 文件)。 |
SAVE | SAVE | (同步,会阻塞) 保存当前数据库的数据到磁盘。 |
FLUSHDB | FLUSHDB [ASYNC] | (危险命令) 清空当前数据库。 |
FLUSHALL | FLUSHALL [ASYNC] | (危险命令) 清空所有数据库。 |
MONITOR | MONITOR | (调试用,生产慎用) 实时打印服务器接收到的命令。 |
SLOWLOG | SLOWLOG subcommand [argument] | 管理慢查询日志。 |
TIME | TIME | 返回当前服务器时间。 |
总结与使用建议
- Key 设计:使用冒号 : 分隔来设计有层次的键名,如 user:1000:profile。
- 生产环境慎用:KEYS、FLUSHDB、FLUSHALL、MONITOR、CONFIG SET 等命令可能会造成服务阻塞或不安全。
- 选择合适的数据结构:
- 对象缓存用 Hash。
- 排行榜、有序集合用 ZSet。
- 标签系统、唯一值集合用 Set。
- 消息队列、最新列表用 List 或 Stream。
- 简单键值对、计数器用 String。
- 唯一用户数统计用 HyperLogLog。
- 地理位置用 GEO。
- 使用 SCAN 系列命令:代替 KEYS 和 SMEMBERS 等可能阻塞的命令,进行增量迭代。