Redis常用命令
【摘要】 Redis 提供了丰富的命令集,除了基本的键值操作和过期时间设置外,还有许多强大的命令可用于数据结构操作、事务处理、发布订阅、集群管理等。以下是 Redis 中一些最常用且实用的命令分类及示例: 一、字符串(String)相关命令字符串是 Redis 最基础的数据结构,适用于缓存、计数器等场景。命令作用示例SET key value [EX seconds] [PX milliseconds...
Redis 提供了丰富的命令集,除了基本的键值操作和过期时间设置外,还有许多强大的命令可用于数据结构操作、事务处理、发布订阅、集群管理等。以下是 Redis 中一些最常用且实用的命令分类及示例:
一、字符串(String)相关命令
字符串是 Redis 最基础的数据结构,适用于缓存、计数器等场景。
命令 | 作用 | 示例 |
---|---|---|
SET key value [EX seconds] [PX milliseconds] [NX/XX] |
设置键值(可设置过期时间、条件写入) | SET user:1000 "Alice" EX 3600 NX |
GET key |
获取键值 | GET user:1000 |
INCR key |
原子递增(整数) | INCR counter |
DECR key |
原子递减(整数) | DECR counter |
INCRBY key increment |
按步长递增 | INCRBY counter 10 |
DECRBY key decrement |
按步长递减 | DECRBY counter 5 |
APPEND key value |
追加字符串 | APPEND msg " world" |
STRLEN key |
获取字符串长度 | STRLEN msg |
MSET key1 value1 key2 value2 ... |
批量设置键值 | MSET name "Bob" age "30" |
MGET key1 key2 ... |
批量获取键值 | MGET name age |
应用场景:
- 缓存用户信息、会话数据。
- 计数器(如文章浏览量、点赞数)。
- 分布式锁(通过
SET NX
实现)。
二、哈希(Hash)相关命令
哈希适合存储对象类型数据(如用户信息、商品详情)。
命令 | 作用 | 示例 |
---|---|---|
HSET key field value |
设置哈希字段 | HSET user:1000 name "Alice" age "25" |
HGET key field |
获取哈希字段 | HGET user:1000 name |
HMSET key field1 value1 field2 value2 ... |
批量设置字段(Redis 4.0.0 后弃用,推荐 HSET ) |
HMSET user:1000 name "Alice" age "25" |
HMGET key field1 field2 ... |
批量获取字段 | HMGET user:1000 name age |
HGETALL key |
获取所有字段和值 | HGETALL user:1000 |
HDEL key field1 field2 ... |
删除字段 | HDEL user:1000 age |
HINCRBY key field increment |
原子递增哈希字段(整数) | HINCRBY user:1000 score 10 |
HEXISTS key field |
检查字段是否存在 | HEXISTS user:1000 name |
HLEN key |
获取字段数量 | HLEN user:1000 |
应用场景:
- 存储用户属性、商品详情。
- 实时统计(如用户行为数据)。
三、列表(List)相关命令
列表是双向链表结构,适合消息队列、最新消息展示等场景。
命令 | 作用 | 示例 |
---|---|---|
LPUSH key value1 value2 ... |
从左侧插入元素 | LPUSH messages "msg1" "msg2" |
RPUSH key value1 value2 ... |
从右侧插入元素 | RPUSH messages "msg3" |
LPOP key |
从左侧弹出元素 | LPOP messages |
RPOP key |
从右侧弹出元素 | RPOP messages |
LRANGE key start stop |
获取列表片段 | LRANGE messages 0 -1 (获取全部) |
LLEN key |
获取列表长度 | LLEN messages |
LINDEX key index |
获取指定位置元素 | LINDEX messages 0 |
LTRIM key start stop |
截取列表片段 | LTRIM messages 0 4 (保留前 5 个) |
应用场景:
- 消息队列(如订单处理)。
- 最新消息时间线(如社交媒体动态)。
四、集合(Set)相关命令
集合是无序且唯一的,适合标签、去重等场景。
命令 | 作用 | 示例 |
---|---|---|
SADD key member1 member2 ... |
添加元素 | SADD tags "redis" "database" |
SMEMBERS key |
获取所有元素 | SMEMBERS tags |
SISMEMBER key member |
检查元素是否存在 | SISMEMBER tags "redis" |
SREM key member1 member2 ... |
删除元素 | SREM tags "database" |
SCARD key |
获取集合元素数量 | SCARD tags |
SINTER key1 key2 ... |
交集 | SINTER tags1 tags2 |
SUNION key1 key2 ... |
并集 | SUNION tags1 tags2 |
SDIFF key1 key2 ... |
差集 | SDIFF tags1 tags2 |
应用场景:
- 用户标签系统(如推荐算法)。
- 共同好友计算(交集)。
五、有序集合(Sorted Set)相关命令
有序集合通过分数排序,适合排行榜、优先级队列等场景。
命令 | 作用 | 示例 |
---|---|---|
ZADD key score member [score member ...] |
添加元素 | ZADD leaderboard 100 "Alice" 90 "Bob" |
ZRANGE key start stop [WITHSCORES] |
按排名获取元素 | ZRANGE leaderboard 0 -1 WITHSCORES |
ZREVRANGE key start stop [WITHSCORES] |
逆序获取元素 | ZREVRANGE leaderboard 0 -1 WITHSCORES |
ZSCORE key member |
获取元素分数 | ZSCORE leaderboard "Alice" |
ZINCRBY key increment member |
原子递增分数 | ZINCRBY leaderboard 10 "Alice" |
ZRANK key member |
获取排名(升序) | ZRANK leaderboard "Alice" |
ZREVRANK key member |
获取排名(降序) | ZREVRANK leaderboard "Alice" |
ZCARD key |
获取元素数量 | ZCARD leaderboard |
应用场景:
- 实时排行榜(如游戏得分)。
- 优先级任务队列。
六、事务与脚本命令
Redis 支持事务和 Lua 脚本,用于保证原子性操作。
命令 | 作用 | 示例 |
---|---|---|
MULTI |
开启事务 | MULTI |
EXEC |
执行事务 | EXEC |
DISCARD |
取消事务 | DISCARD |
WATCH key1 key2 ... |
乐观锁(监视键) | WATCH stock:1000 |
UNWATCH |
取消监视 | UNWATCH |
EVAL script numkeys key1 key2 ... arg1 arg2 ... |
执行 Lua 脚本 | EVAL "return redis.call('GET', KEYS[1])" 1 mykey |
应用场景:
- 银行转账(原子操作)。
- 复杂逻辑的原子性执行(如批量更新+条件判断)。
七、发布/订阅命令
Redis 支持发布/订阅模式,用于实时消息推送。
命令 | 作用 | 示例 |
---|---|---|
SUBSCRIBE channel1 channel2 ... |
订阅频道 | SUBSCRIBE news:sports |
PUBLISH channel message |
发布消息 | PUBLISH news:sports "Goal!" |
UNSUBSCRIBE channel1 channel2 ... |
取消订阅 | UNSUBSCRIBE news:sports |
PSUBSCRIBE pattern1 pattern2 ... |
模式订阅(支持通配符) | PSUBSCRIBE news:* |
应用场景:
- 实时聊天系统。
- 通知服务(如订单状态更新)。
八、服务器管理命令
用于监控、配置和集群管理。
命令 | 作用 | 示例 |
---|---|---|
INFO [section] |
获取服务器信息 | INFO memory (查看内存使用) |
CONFIG GET parameter |
获取配置参数 | CONFIG GET maxmemory |
CONFIG SET parameter value |
动态修改配置 | CONFIG SET maxmemory 1gb |
DBSIZE |
获取当前数据库 Key 数量 | DBSIZE |
KEYS pattern |
查找 Key(生产环境慎用) | KEYS user:* |
SCAN cursor [MATCH pattern] [COUNT count] |
增量迭代 Key | SCAN 0 MATCH user:* COUNT 100 |
FLUSHDB |
清空当前数据库 | FLUSHDB |
FLUSHALL |
清空所有数据库 | FLUSHALL |
应用场景:
- 监控 Redis 运行状态。
- 动态调整配置(如内存限制)。
九、集群相关命令
用于 Redis Cluster 模式下的节点管理。
命令 | 作用 | 示例 |
---|---|---|
CLUSTER NODES |
查看集群节点信息 | CLUSTER NODES |
CLUSTER MEET ip port |
将节点加入集群 | CLUSTER MEET 192.168.1.1 6379 |
CLUSTER REPLICATE node-id |
设置主从关系 | CLUSTER REPLICATE node-id |
CLUSTER KEYSLOT key |
计算 Key 的槽位 | CLUSTER KEYSLOT "user:1000" |
应用场景:
- 搭建和管理 Redis 集群。
- 故障转移和扩容。
十、高级功能命令
1. 流(Stream)命令
Redis 5.0+ 引入的流数据结构,适合消息队列和事件溯源。
命令 | 作用 | 示例 |
---|---|---|
XADD stream * field1 value1 field2 value2 |
添加消息 | XADD mystream * name "Alice" age "25" |
XRANGE stream start end [COUNT count] |
读取消息范围 | XRANGE mystream - + |
XREAD COUNT count STREAMS stream1 stream2 ... |
消费者组读取 | XREAD COUNT 1 STREAMS mystream 0 |
2. 位图(Bitmap)命令
通过字符串操作位数据,适合统计和布隆过滤器。
命令 | 作用 | 示例 |
---|---|---|
SETBIT key offset value |
设置位 | SETBIT user:1000:signin 0 1 |
GETBIT key offset |
获取位 | GETBIT user:1000:signin 0 |
BITCOUNT key [start end] |
统计置位数量 | BITCOUNT user:1000:signin |
3. 地理空间(Geo)命令
Redis 3.2+ 支持地理空间索引,适合 LBS 应用。
命令 | 作用 | 示例 |
---|---|---|
GEOADD key longitude latitude member |
添加地理位置 | GEOADD cities 116.4 39.9 "Beijing" |
GEODIST key member1 member2 [unit] |
计算距离 | GEODIST cities Beijing Shanghai km |
GEORADIUS key longitude latitude radius m|km|ft|mi |
附近地点查询 | GEORADIUS cities 116.4 39.9 100 km |
总结:Redis 命令选择指南
场景 | 推荐命令 |
---|---|
缓存/计数器 | SET , GET , INCR , EXPIRE |
对象存储 | HSET , HGET , HGETALL |
消息队列 | LPUSH , RPOP , BRPOP |
排行榜 | ZADD , ZRANGE , ZREVRANK |
实时通知 | PUBLISH , SUBSCRIBE |
分布式锁 | SET NX , EXPIRE |
批量操作 | MSET , MGET , PIPELINE |
复杂逻辑 | EVAL (Lua 脚本) |
Redis 的命令设计简洁高效,合理使用可以大幅提升开发效率。建议通过 Redis 官方文档 深入学习每个命令的细节和性能特性。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)