Redis作为当下最流行的内存数据库之一,被广泛用于缓存、计数器、排行榜和消息队列等场景。虽然市面上有很多图形化管理工具,但命令行始终是学习和调试Redis最直接、最可靠的方式。掌握redis-cli的基本操作,不仅能帮助理解Redis的数据模型,也是在服务器排查问题时必备的技能。本文将从连接服务、数据类型操作、键管理和常用运维命令几个方面,系统介绍Redis命令行的入门知识。

一、连接Redis服务器与基础准备
安装Redis后,通常会自带一个命令行客户端redis-cli。最简单的用法是直接在终端输入redis-cli,默认连接本机127.0.0.1的6379端口。连接成功后输入ping,如果服务器返回PONG,说明连接正常。
如果Redis设置了密码或者监听了其他端口,需要在连接时指定参数。常用参数包括-h指定主机、-p指定端口、-a指定密码。需要注意密码也可以在连接后通过auth命令输入,这样更安全,避免密码出现在shell的历史记录里。
# 连接本地默认端口 redis-cli # 连接远程主机并指定端口和密码 redis-cli -h 192.168.1.100 -p 6379 -a yourpassword # 连接后手动认证 redis-cli -h 192.168.1.100 auth yourpassword # 测试连通性 ping # 查看当前数据库(默认有16个库,编号0到15) select 0
Redis默认提供16个逻辑数据库,通过select命令切换,不同库之间的数据相互隔离。此外,输入info可以查看服务器的运行状态,dbsize可以查看当前库的键总数,这两个命令在日常运维中使用频率很高。
二、五大数据类型的常用命令详解
Redis并不是简单的key-value存储,它支持字符串、哈希、列表、集合和有序集合五种核心数据类型,每种类型都有对应的操作命令。理解这些类型的适用场景,是用好Redis的关键。
1. 字符串String
字符串是最基础的类型,一个key对应一个字符串值,常用于缓存对象序列化后的内容、计数器等场景。set用于写入,get用于读取,incr可以对数字类型的值做原子自增,这在实现点赞数、访问量统计时非常高效。
# 设置键值 set name "redis" # 读取键值 get name # 一次性设置多个键 mset city "beijing" lang "java" # 一次性读取多个键 mget city lang # 数值自增与自减 set counter 100 incr counter incrby counter 10 decr counter
2. 哈希Hash
哈希类型适合存储对象的多个字段,比如用户信息。相比把整个对象序列化成字符串,哈希可以单独读写某个字段,避免频繁反序列化整个对象,节省网络开销。
# 设置哈希字段 hset user:1 name "tom" age 25 # 获取单个字段 hget user:1 name # 获取全部字段和值 hgetall user:1 # 只获取所有字段名或字段值 hkeys user:1 hvals user:1 # 删除某个字段 hdel user:1 age
3. 列表List
列表是一个双向链表结构,支持从两端插入和弹出元素,常用于消息队列、最新动态列表等场景。lpush从左侧插入,rpush从右侧插入,lrange按范围查看元素。
# 从左侧依次插入元素 lpush tasks "task1" "task2" "task3" # 从右侧插入元素 rpush tasks "task4" # 查看指定范围的元素,0到-1表示全部 lrange tasks 0 -1 # 弹出元素 lpop tasks rpop tasks # 获取列表长度 llen tasks
4. 集合Set与有序集合ZSet
集合用来存放不重复的元素,适合标签、去重、共同好友等场景;有序集合在集合基础上为每个元素增加一个分数,天然适合实现排行榜。zrange配合withscores参数可以同时返回分数。
# 集合操作 sadd tags "java" "redis" "mysql" smembers tags sismember tags "java" scard tags srem tags "mysql" # 有序集合实现排行榜 zadd rank 90 "tom" 85 "jack" 95 "lucy" # 按分数从低到高查看 zrange rank 0 -1 withscores # 按分数从高到低查看 zrevrange rank 0 -1 withscores # 获取某个成员的排名,从0开始 zrank rank tom zrevrank rank tom
三、键管理与过期时间操作
无论哪种数据类型,键的管理命令都是通用的。keys可以按模式匹配查找键,但在生产环境中要谨慎使用,因为数据量大时会阻塞服务器,推荐用scan渐进式遍历代替。删除键使用del,判断键是否存在使用exists。
过期时间是Redis作为缓存的核心能力之一。通过expire可以为键设置秒级过期时间,ttl查看剩余生存时间,返回-2表示键不存在,返回-1表示永不过期。persist可以移除过期时间,让键变成永久有效。
# 查看所有键(生产环境慎用) keys * # 按模式匹配 keys user:* # 渐进式遍历,更安全 scan 0 match user:* count 100 # 判断键是否存在 exists name # 查看键的数据类型 type user:1 # 删除键 del name # 设置60秒过期 expire name 60 # 查看剩余时间 ttl name # 移除过期时间 persist name # 设置键的同时指定过期时间 set session "abc" ex 3600
四、事务与发布订阅入门
Redis支持简单的事务,通过multi开启事务,之后的命令会进入队列,执行exec时一次性按顺序执行,discard可以取消事务。需要注意Redis的事务不支持回滚,如果队列中某条命令执行出错,其他命令仍会执行。
# 开启事务 multi set k1 "v1" set k2 "v2" incr counter # 执行事务 exec # 取消事务示例 multi set k3 "v3" discard
发布订阅是Redis的消息通信模型,订阅方通过subscribe监听频道,发布方通过publish发送消息,所有在线的订阅者都能立即收到。这个模式常用于实时通知、聊天室等轻量级场景,但消息不持久化,订阅者离线期间的消息会丢失。
# 终端一:订阅频道 subscribe news # 终端二:向频道发布消息 publish news "hello redis"
五、日常运维常用命令总结
除了数据操作,还有一些命令在排查问题和管理数据时经常用到。info查看服务器整体状态,包括内存使用、连接数、持久化信息等;flushdb清空当前库,flushall清空所有库,这两个命令破坏性极大,执行前务必确认环境;slowlog可以查看慢查询日志,帮助定位性能瓶颈。
# 查看服务器信息 info info memory # 当前库键数量 dbsize # 查看慢查询 slowlog get 10 # 清空当前数据库(危险操作) flushdb # 修改键名 rename oldkey newkey # 随机返回一个键 randomkey
总的来说,Redis命令行的学习曲线并不陡峭,核心在于理解五种数据类型的特点和各自的适用场景,再配合键管理与过期时间的通用命令,就能应对绝大多数日常需求。建议在自己的机器上装一个Redis实例,把本文的命令逐一敲一遍,动手实践是掌握Redis最有效的途径。熟练之后再逐步深入持久化机制、主从复制和集群部署,就能构建起完整的Redis知识体系。