第四章:核心命令手册
全面介绍 Redis 的核心命令,包括键操作、服务器管理、连接管理等。
最后更新: 2024-01-15
页面目录
Redis 核心命令手册
本章详细介绍 Redis 的核心命令,涵盖键操作、服务器管理、连接管理等方面。
键(Key)操作
基本键操作
# 设置和获取
SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds|KEEPTTL]
GET key
# 批量操作
MSET key1 value1 key2 value2 key3 value3
MGET key1 key2 key3
# 设置时设置过期
SETEX key 60 value # 60秒后过期
PSETEX key 60000 value # 60000毫秒后过期
SETNX key value # 不存在时设置(原子操作)
MSETNX key1 value1 key2 value2 # 批量不存在时设置
# 获取和删除
DEL key1 key2 key3 # 删除(返回删除数量)
UNLINK key1 key2 # 异步删除(推荐)
EXISTS key1 key2 # 键是否存在(返回数量)
TYPE key # 键的类型
过期时间操作
# 设置过期
EXPIRE key seconds # 秒级过期
PEXPIRE key milliseconds # 毫秒级过期
EXPIREAT key timestamp # 未来某时间点过期(Unix时间戳)
PEXPIREAT key timestamp # 未来某时间点过期(毫秒时间戳)
# 查询过期
TTL key # 剩余生存时间(秒),-1无过期,-2不存在
PTTL key # 剩余生存时间(毫秒)
# 移除过期
PERSIST key # 移除过期,使键永久有效
键值移动
# 移动键到其他数据库
MOVE key db # 0-15
SELECT db # 切换数据库
# 键值替换
GETSET key newvalue # 获取旧值并设置新值(原子)
键扫描
# 扫描键(避免 KEYS 阻塞)
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
# 示例
SCAN 0 MATCH user:* COUNT 100
SCAN 0 MATCH * COUNT 100
SCAN 0 TYPE string
# 按类型扫描
SCAN 0 TYPE hash
SCAN 0 TYPE list
键重命名
# 重命名
RENAME key newkey
RENAMENX key newkey # 新键不存在时才重命名
键过期策略
Redis 采用两种过期策略:
惰性删除
# 客户端访问时检查,过期则删除
GET key # 过期则返回 nil
定期删除
# 每隔一段时间,随机检查部分键,删除过期的键
# 配置文件配置检查频率
hz 10 # 每秒检查10次
服务器管理命令
服务器信息
# 服务器信息
INFO [section] # 获取服务器信息
# section: server, clients, memory, persistence, stats, replication, cpu, commandstats, cluster, keyspace
INFO memory # 内存信息
INFO replication # 复制信息
INFO stats # 统计信息
# 服务器时间
TIME # 返回服务器当前时间(Unix时间戳+微秒)
# 返回: [timestamp, microseconds]
# 客户端信息
CLIENT LIST # 所有客户端列表
CLIENT ID # 当前客户端 ID
CLIENT KILL ip:port # 关闭指定客户端
CLIENT SETNAME name # 设置当前客户端名
CLIENT GETNAME # 获取当前客户端名
配置管理
# 运行时配置
CONFIG GET parameter # 获取配置项
CONFIG SET parameter value # 设置配置项(临时)
CONFIG RESETSTAT # 重置统计信息
# 示例
CONFIG GET maxmemory
CONFIG SET maxmemory 2gb
CONFIG GET bind
CONFIG SET appendonly yes
# 保存配置
CONFIG REWRITE # 将运行时配置写入配置文件
数据库管理
# 数据库操作
SELECT db # 切换数据库(0-15)
DBSIZE # 当前数据库键数量
FLUSHDB # 清空当前数据库
FLUSHALL # 清空所有数据库
# 危险操作确认
FLUSHDB ASYNC # 异步清空
FLUSHALL ASYNC # 异步清空所有
持久化命令
# RDB 快照
SAVE # 同步保存(阻塞)
BGSAVE # 后台异步保存
# 查看保存状态
LASTSAVE # 上次 SAVE 时间戳
BGSAVE # 返回子进程 PID
# AOF 重写
BGREWRITEAOF # 后台重写 AOF
集群命令
# 集群模式
CLUSTER INFO # 集群信息
CLUSTER NODES # 集群节点信息
CLUSTER SLOTS # 槽位分配
CLUSTER KEYSLOT key # 键所在槽位
CLUSTER COUNTKEYSINSLOT slot # 槽位键数量
CLUSTER GETKEYSINSLOT slot count # 获取槽位键
# 集群节点管理
CLUSTER MEET ip port # 加入集群
CLUSTER FORGET node_id # 移除节点
CLUSTER REPLICATE node_id # 设置为主节点的从节点
CLUSTER FAILOVER # 故障转移
连接管理
# 连接命令
PING [message] # 测试连接
AUTH password # 认证
ECHO message # 回显
QUIT # 关闭连接
SWAPDB db1 db2 # 交换两个数据库
事务命令
# 事务
MULTI # 开始事务
EXEC # 执行事务
DISCARD # 取消事务
# 监视(乐观锁)
WATCH key1 key2 # 监视键
UNWATCH # 取消监视
# 示例
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey val
EXEC # 如果 mykey 未变化则成功
Lua 脚本
# 执行 Lua 脚本
EVAL script numkeys key [key ...] arg [arg ...]
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
# 脚本管理
SCRIPT EXISTS sha1 [sha1 ...]
SCRIPT LOAD script
SCRIPT FLUSH # 清除所有脚本缓存
SCRIPT KILL # 杀死运行中的脚本
# 示例:分布式锁
EVAL "if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end" 1 lock:order "uuid-xxx"
# 示例:限流
EVAL "local cnt=redis.call('incr',KEYS[1]) if cnt==1 then redis.call('expire',KEYS[1],ARGV[1]) end return cnt" 1 rate:limit:user:1001 60
慢查询日志
# 慢查询配置
SLOWLOG GET [n] # 获取前 n 条慢查询
SLOWLOG LEN # 慢查询数量
SLOWLOG RESET # 清空慢查询日志
# 返回字段
# 1) 日志ID
# 2) 执行时间(微秒)
# 3) 命令和参数
# 4) 客户端 IP:端口
# 示例输出
SLOWLOG GET 5
# 1) 1) (integer) 5
# 2) (integer) 1500
# 3) 1) "SMEMBERS"
# 2) "tags:article:1001"
# 4) "127.0.0.1:54321"
哨兵命令
# 哨兵模式(连接哨兵)
SENTINEL masters # 所有主节点
SENTINEL master mymaster # 指定主节点信息
SENTINEL slaves mymaster # 从节点列表
SENTINEL get-master-addr-by-name mymaster # 主节点地址
SENTINEL is-master-down-by-addr ip port # 检查主节点状态
SENTINEL failover mymaster # 手动故障转移
发布订阅
# 发布
PUBLISH channel message
# 订阅
SUBSCRIBE channel1 channel2
PSUBSCRIBE pattern1 pattern2 # 模式订阅
# 取消
UNSUBSCRIBE [channel]
PUNSUBSCRIBE [pattern]
# 查看
PUBSUB CHANNELS [pattern]
PUBSUB NUMSUB [channel]
PUBSUB NUMPAT # 模式订阅数量
# 示例
# 终端1:订阅消息
SUBSCRIBE news:tech
# 终端2:发布消息
PUBLISH news:tech "Redis 7.0 发布!"
# 终端1 收到:
# 1) "message"
# 2) "news:tech"
# 3) "Redis 7.0 发布!"
HyperLogLog
# 基数统计(内存高效的去重计数)
PFADD key element [element ...]
PFCOUNT key [key ...]
PFMERGE destkey sourcekey [sourcekey ...]
# 示例:UV 统计
PFADD uv:20240115 "ip-001" "ip-002" "ip-003"
PFADD uv:20240115 "ip-001" # 重复,不计入
PFCOUNT uv:20240115 # 返回 3
# 合并多天 UV
PFMERGE uv:week uv:20240115 uv:20240116 uv:20240117
PFCOUNT uv:week
Bitmap
# 位图操作
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start end]
BITOP AND|OR|XOR|NOT destkey key [key ...]
BITPOS key bit [start] [end]
BITFIELD key GET|SET|INCRBY bit offset
# 示例:签到
SETBIT sign:user:1001:202401 0 # 1月1日签到
SETBIT sign:user:1001:202401 2 # 1月3日签到
BITCOUNT sign:user:1001:202401 # 签到次数
# 示例:在线状态
SETBIT online:user 1001 1 # 用户1001上线
SETBIT online:user 1002 1 # 用户1002上线
GETBIT online:user 1001 # 用户1001是否在线
BITCOUNT online:user # 在线人数
GEO 地理
# 地理位置
GEOADD key longitude latitude member [longitude latitude member ...]
GEOPOS key member [member ...]
GEODIST key member1 member2 [unit]
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT n]
GEORADIUSBYMEMBER key member radius unit [WITHDIST] [COUNT n]
GEOHASH key member [member ...]
# 示例:附近的人
GEOADD cities 116.408 39.904 "北京"
GEOADD cities 121.473 31.230 "上海"
GEOADD cities 113.264 23.119 "广州"
# 距离
GEODIST cities "北京" "上海" km # 两城市距离
# 附近的人
GEORADIUS cities 116.408 39.904 100 km WITHDIST
连接池
Python 示例
import redis
# 创建连接池
pool = redis.ConnectionPool(
host='localhost',
port=6379,
password='password',
db=0,
max_connections=10
)
# 使用连接池
client = redis.Redis(connection_pool=pool)
# 执行命令
client.set('key', 'value')
client.get('key')
Java 示例
import redis.clients.jedis.*;
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10);
config.setMaxIdle(5);
JedisPool pool = new JedisPool(
config,
"localhost",
6379,
2000,
"password"
);
try (Jedis jedis = pool.getResource()) {
jedis.set("key", "value");
String value = jedis.get("key");
}
命令速查表
| 命令 | 说明 | 时间复杂度 |
|---|---|---|
| SET | 设置值 | O(1) |
| GET | 获取值 | O(1) |
| DEL | 删除键 | O(N) |
| EXISTS | 键是否存在 | O(N) |
| EXPIRE | 设置过期 | O(1) |
| HSET | 设置哈希字段 | O(1) |
| HGET | 获取哈希字段 | O(1) |
| LPUSH | 左侧插入 | O(1) |
| RPUSH | 右侧插入 | O(1) |
| SADD | 添加集合成员 | O(1) |
| ZADD | 添加有序集合 | O(log N) |
| INCR | 原子加1 | O(1) |
下一步
接下来让我们学习 Redis 的持久化机制。
👉 持久化机制