
1. Redis基础命令概述Redis作为当今最流行的内存数据库之一其命令行接口是与服务交互的主要方式。掌握基础命令不仅能提高日常工作效率更是深入理解Redis特性的必经之路。本文将系统梳理Redis五大数据类型String、Hash、List、Set、Sorted Set的常用命令并分享实际使用中的经验技巧。提示所有命令示例均基于Redis 6.2版本不同版本可能存在细微差异。建议先通过redis-cli --version确认客户端版本。2. 键空间操作命令2.1 基础键管理# 设置键值自动创建 SET user:1001 张三 # 获取键值不存在返回nil GET user:1001 # 检查键是否存在返回1/0 EXISTS user:1001 # 设置过期时间秒 EXPIRE user:1001 3600 # 查看剩余生存时间 TTL user:1001注意事项键名推荐使用对象类型:id的命名规范如user:1001生产环境慎用KEYS *命令会阻塞整个服务建议使用SCAN迭代2.2 批量操作# 批量设置原子性操作 MSET config:max_conn 100 config:timeout 30 # 批量获取 MGET config:max_conn config:timeout # 删除多个键 DEL user:1001 user:1002性能优化批量命令可减少网络往返时间(RTT)单次MSET/GET操作建议控制在1000个键以内3. 字符串类型命令3.1 基础操作# 设置数值并自增 SET counter 100 INCR counter # 101 # 浮点数操作 INCRBYFLOAT price 9.99 # 位图操作 SETBIT login:20230501 100 1 # 记录用户100的登录状态 GETBIT login:20230501 100 # 13.2 高级用法# 带过期时间的设置 SET session:abc user_data EX 3600 NX # 仅当键不存在时设置 # 获取子字符串 GETRANGE description 0 100 # 原子性比较设置 CAS lock:res001 $(GET lock:res001) new_value应用场景计数器INCR/DECR分布式锁SET NX EX位图统计SETBIT/BITCOUNT4. 哈希类型命令4.1 字段操作# 设置用户属性 HSET user:1001 name 张三 age 30 email zhangexample.com # 获取单个字段 HGET user:1001 name # 张三 # 获取所有字段 HGETALL user:1001 # 字段自增 HINCRBY user:1001 age 14.2 批量操作# 批量设置字段 HMSET product:1001 name 手机 price 2999 stock 100 # 获取多个字段 HMGET product:1001 name price # 获取字段数量 HLEN product:1001存储优化当字段数少于100时哈希的内存效率最高大哈希1000字段考虑分片存储5. 列表类型命令5.1 基础操作# 左右端插入 LPUSH news:latest 头条1 RPUSH news:latest 头条2 # 范围查询 LRANGE news:latest 0 9 # 获取最新10条 # 弹出元素 LPOP news:latest RPOP news:latest5.2 阻塞操作# 阻塞式弹出超时10秒 BLPOP task_queue 10 # 原子性转移 RPOPLPUSH src_list dst_list典型应用消息队列LPUSHBRPOP最新消息列表LPUSHLTRIM循环队列RPOPLPUSH6. 集合类型命令6.1 成员操作# 添加成员 SADD tags:article:1001 科技 Redis 数据库 # 检查成员 SISMEMBER tags:article:1001 Redis # 1 # 随机弹出 SPOP tags:article:10016.2 集合运算# 并集 SUNION tags:article:1001 tags:article:1002 # 差集 SDIFF tags:article:1001 tags:article:1002 # 交集 SINTER tags:article:1001 tags:article:1002使用技巧小集合1000成员直接运算大集合先存储到临时键再处理7. 有序集合命令7.1 分数操作# 添加带分值的成员 ZADD leaderboard 100 player1 90 player2 # 按分数范围查询 ZRANGEBYSCORE leaderboard 90 100 # 获取排名 ZRANK leaderboard player17.2 高级查询# 分页查询Top10 ZREVRANGE leaderboard 0 9 WITHSCORES # 分数递增 ZINCRBY leaderboard 5 player1应用场景排行榜ZADDZREVRANGE延迟队列分数执行时间戳范围查询地理位置等8. 事务与管道8.1 事务操作# 开启事务 MULTI SET balance:1001 500 DECRBY balance:1001 100 INCRBY balance:1002 100 EXEC # 提交执行8.2 管道优化# 一次性发送多个命令非原子性 (echo -en PING\r\nSET key1 value1\r\nGET key1\r\n; sleep 1) | nc localhost 6379注意事项Redis事务不支持回滚管道可提升吞吐量但会增大内存使用9. 实用技巧与问题排查9.1 性能优化# 慢查询日志 CONFIG SET slowlog-log-slower-than 10000 # 10毫秒 SLOWLOG GET 5 # 查看最近5条慢查询 # 内存分析 MEMORY USAGE key_name9.2 常见问题处理键未过期检查TTL key返回值确认没有PERSIST操作排查内存淘汰策略配置管道超时分批次发送命令设置合理的socket超时监控输出缓冲区大小连接池耗尽检查CLIENT LIST调整maxclients参数使用连接复用技术10. 安全配置建议# 密码认证 CONFIG SET requirepass complex_password # 危险命令重命名 RENAME-COMMAND FLUSHDB FLUSHDB_MUST_AUTH RENAME-COMMAND KEYS KEYS_MUST_AUTH # 限制IP访问 bind 127.0.0.1实际使用中我发现合理组合基础命令往往能解决复杂需求。比如用ZSETHASH实现带扩展属性的排行榜用LISTSET实现去重的消息队列。掌握这些命令的核心在于理解其时间复杂度避免在大数据集上使用O(N)操作