Redis常用命令详解:从基础到高阶应用指南
一、Redis命令使用须知
- 两种连接方式:
- 命令行工具:
redis-cli
- 编程客户端(Java/Python等)
- 通用语法:
COMMAND KEY [PARAMS]
- 返回值类型:
- 简单字符串(Simple Strings)
- 错误信息(Errors)
- 整型(Integers)
- 批量字符串(Bulk Strings)
- 数组(Arrays)
二、核心数据类型操作命令
1. 字符串(String)类型
命令 | 语法 | 时间复杂度 | 说明 |
---|
SET | SET key value [EX seconds][PX milliseconds][NX|XX] | O(1) | 支持过期时间和存在性判断 |
GET | GET key | O(1) | 获取字符串值 |
INCR | INCR key | O(1) | 原子递增计数器 |
MSET | MSET key1 value1 [key2 value2...] | O(N) | 批量设置值 |
GETSET | GETSET key new_value | O(1) | 设置新值返回旧值 |
场景示例:
> SET user:1001:points 500 EX 3600 NX
> INCR article:2023:views
> MSET config:timeout 30 config:maxconn 1000
2. 哈希(Hash)类型
命令 | 语法 | 说明 |
---|
HSET | HSET key field value | 设置单个字段 |
HGET | HGET key field | 获取字段值 |
HMSET | HMSET key field1 value1 [field2 value2...] | 批量设置字段(已弃用,建议用HSET) |
HGETALL | HGETALL key | 获取所有字段(慎用大数据量) |
HSCAN | HSCAN key cursor [MATCH pattern][COUNT count] | 安全遍历大哈希 |
对象存储示例:
> HSET user:1001 name "张三" age 28 email "zhangsan@example.com"
> HINCRBY user:1001 age 1
3. 列表(List)类型
命令 | 作用 | 典型场景 |
---|
LPUSH/RPUSH | 左/右插入元素 | 消息队列、最新列表 |
LPOP/RPOP | 左/右弹出元素 | 任务队列消费 |
BLPOP/BRPOP | 阻塞式弹出 | 实时消息系统 |
LRANGE | 范围查询 | 分页查询历史记录 |
LTRIM | 修剪列表 | 维护固定长度队列 |
队列实现示例:
> LPUSH orders:queue "order_1001"
> BRPOP orders:queue 30
三、高级功能命令
1. 事务控制
> MULTI
> SET key1 100
> INCR key1
> EXEC
2. 发布订阅
> SUBSCRIBE news
> PUBLISH news "重大系统更新通知"
3. Lua脚本
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
四、系统管理命令
1. 持久化控制
命令 | 说明 |
---|
SAVE | 阻塞式保存RDB |
BGSAVE | 后台保存RDB |
AOF | 通过配置启用AOF持久化 |
2. 性能分析
> SLOWLOG GET 5
> INFO MEMORY
3. 集群管理
> CLUSTER NODES
> CLUSTER INFO
> CLUSTER FAILOVER
五、最佳实践与注意事项
1. 键命名规范
- 使用
业务:类型:ID
格式:user:profile:1001
- 避免特殊字符,统一使用小写
- 控制键长度(推荐≤128字节)
2. 危险命令规避
KEYS *
FLUSHALL/FLUSHDB
CONFIG SET ...
3. 性能优化技巧
- Pipeline批量操作减少RTT
- 大Value拆分(Hash使用HSCAN)
- 合理设置过期时间
六、命令速查表(Cheat Sheet)
类别 | 必备命令 |
---|
通用命令 | DEL, EXISTS, EXPIRE, TTL, TYPE |
字符串 | SET, GET, INCR, DECR, STRLEN |
哈希 | HSET, HGET, HDEL, HKEYS, HLEN |
列表 | LPUSH, RPOP, LLEN, LINDEX, LINSERT |
集合 | SADD, SMEMBERS, SISMEMBER, SUNION |
有序集合 | ZADD, ZRANGE, ZSCORE, ZREVRANK |
七、实战演练案例
案例1:分布式锁实现
SET lock:order1234 "uuid" NX PX 30000
EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end" 1 lock:order1234 uuid
案例2:排行榜实现
> ZADD leaderboard 95 "PlayerA"
> ZADD leaderboard 87 "PlayerB"
> ZREVRANGE leaderboard 0 2 WITHSCORES
八、学习资源推荐
- 官方命令文档:https://redis.io/commands
- 交互式教程:https://try.redis.io/
- Redis Desktop Manager:可视化操作工具
通过系统掌握这些命令,开发者可以充分发挥Redis高性能、高并发的特性,构建稳定可靠的分布式系统。建议结合具体业务场景进行实践,并定期使用MONITOR
命令观察实际命令执行情况。