跳到主要内容

Redis 速查表

本文档提供 Redis 常用命令的快速参考。

连接管理

# 连接 Redis
redis-cli

# 连接指定主机和端口
redis-cli -h 127.0.0.1 -p 6379

# 带密码连接
redis-cli -a password

# 测试连接
PING

# 认证
AUTH password

# 选择数据库
SELECT 0

# 查看服务器信息
INFO

# 查看统计信息
INFO stats

# 查看内存信息
INFO memory

通用命令

# 查看所有键(生产环境慎用)
KEYS *

# 查看匹配的键
KEYS user:*

# 检查键是否存在
EXISTS key

# 删除键
DEL key
DEL key1 key2

# 设置过期时间(秒)
EXPIRE key 60

# 设置过期时间(毫秒)
PEXPIRE key 60000

# 设置过期时间戳
EXPIREAT key 1704067200

# 查看剩余过期时间(秒)
TTL key

# 查看剩余过期时间(毫秒)
PTTL key

# 移除过期时间
PERSIST key

# 查看键的类型
TYPE key

# 重命名键
RENAME oldkey newkey

# 仅当新键不存在时重命名
RENAMENX oldkey newkey

# 随机返回一个键
RANDOMKEY

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

字符串(String)

# 设置值
SET key value

# 设置值并设置过期时间
SETEX key 60 value

# 设置值(仅当不存在)
SETNX key value

# 获取值
GET key

# 批量设置
MSET key1 v1 key2 v2

# 批量获取
MGET key1 key2

# 递增
INCR key
INCRBY key 10

# 递减
DECR key
DECRBY key 10

# 浮点数递增
INCRBYFLOAT key 2.5

# 追加字符串
APPEND key suffix

# 获取长度
STRLEN key

# 获取子串
GETRANGE key 0 10

# 设置子串
SETRANGE key 0 newvalue

哈希(Hash)

# 设置字段
HSET key field value

# 设置多个字段
HMSET key f1 v1 f2 v2

# 获取字段
HGET key field

# 获取多个字段
HMGET key f1 f2

# 获取所有字段和值
HGETALL key

# 获取所有字段名
HKEYS key

# 获取所有值
HVALS key

# 检查字段是否存在
HEXISTS key field

# 删除字段
HDEL key field

# 获取字段数量
HLEN key

# 字段值递增
HINCRBY key field 10
HINCRBYFLOAT key field 2.5

# 仅当字段不存在时设置
HSETNX key field value

列表(List)

# 左侧插入
LPUSH key v1 v2

# 右侧插入
RPUSH key v1 v2

# 左侧弹出
LPOP key

# 右侧弹出
RPOP key

# 阻塞左侧弹出
BLPOP key 5

# 阻塞右侧弹出
BRPOP key 5

# 获取列表长度
LLEN key

# 获取范围内的元素
LRANGE key 0 -1

# 获取指定索引的元素
LINDEX key 0

# 设置指定索引的值
LSET key 0 value

# 删除指定数量的元素
LREM key 2 value

# 保留指定范围内的元素
LTRIM key 0 9

# 在指定元素前插入
LINSERT key BEFORE pivot value

# 在指定元素后插入
LINSERT key AFTER pivot value

集合(Set)

# 添加元素
SADD key member1 member2

# 获取所有元素
SMEMBERS key

# 检查元素是否存在
SISMEMBER key member

# 删除元素
SREM key member

# 获取集合大小
SCARD key

# 随机获取元素
SRANDMEMBER key
SRANDMEMBER key 2

# 随机弹出元素
SPOP key

# 移动元素到另一个集合
SMOVE source dest member

# 交集
SINTER key1 key2

# 并集
SUNION key1 key2

# 差集
SDIFF key1 key2

# 交集存储
SINTERSTORE dest key1 key2

# 并集存储
SUNIONSTORE dest key1 key2

# 差集存储
SDIFFSTORE dest key1 key2

有序集合(Sorted Set)

# 添加元素
ZADD key score member

# 获取元素分数
ZSCORE key member

# 获取排名(从低到高)
ZRANK key member

# 获取排名(从高到低)
ZREVRANK key member

# 递增分数
ZINCRBY key 10 member

# 获取集合大小
ZCARD key

# 获取分数范围内的元素数量
ZCOUNT key min max

# 按排名范围获取(从低到高)
ZRANGE key 0 -1
ZRANGE key 0 -1 WITHSCORES

# 按排名范围获取(从高到低)
ZREVRANGE key 0 -1

# 按分数范围获取
ZRANGEBYSCORE key min max
ZRANGEBYSCORE key (min (max # 不包含边界

# 删除元素
ZREM key member

# 按排名范围删除
ZREMRANGEBYRANK key 0 10

# 按分数范围删除
ZREMRANGEBYSCORE key min max

# 并集
ZUNIONSTORE dest numkeys key1 key2

# 交集
ZINTERSTORE dest numkeys key1 key2

键空间通知

# 启用键空间通知(配置文件)
notify-keyspace-events Ex

# 订阅键过期事件
PSUBSCRIBE __keyevent@0__:expired

# 订阅键空间事件
PSUBSCRIBE __keyspace@0__:*

发布订阅

# 订阅频道
SUBSCRIBE channel

# 订阅多个频道
SUBSCRIBE channel1 channel2

# 订阅匹配的频道
PSUBSCRIBE news:*

# 发布消息
PUBLISH channel message

# 退订
UNSUBSCRIBE channel
PUNSUBSCRIBE pattern

# 查看订阅信息
PUBSUB CHANNELS
PUBSUB NUMSUB channel

事务

# 开始事务
MULTI

# 执行命令(进入队列)
SET key value
GET key

# 执行事务
EXEC

# 取消事务
DISCARD

# 监视键(乐观锁)
WATCH key

# 取消监视
UNWATCH

Lua 脚本

# 执行脚本
EVAL "return redis.call('GET', KEYS[1])" 1 key

# 执行脚本(使用 SHA1)
EVALSHA sha1 numkeys key arg

# 加载脚本
SCRIPT LOAD "return redis.call('GET', KEYS[1])"

# 检查脚本是否存在
SCRIPT EXISTS sha1

# 清除所有脚本
SCRIPT FLUSH

# 杀死正在运行的脚本
SCRIPT KILL

持久化

# RDB 快照
SAVE # 同步保存(阻塞)
BGSAVE # 后台保存

# AOF 重写
BGREWRITEAOF

# 查看持久化状态
INFO persistence

# 查看最后保存时间
LASTSAVE

主从复制

# 设置主节点
REPLICAOF host port

# 取消主从复制
REPLICAOF NO ONE

# 查看复制信息
INFO replication

集群

# 查看集群信息
CLUSTER INFO

# 查看集群节点
CLUSTER NODES

# 添加节点
CLUSTER MEET ip port

# 删除节点
CLUSTER FORGET node_id

# 设置槽位
CLUSTER ADDSLOTS slot

# 删除槽位
CLUSTER DELSLOTS slot

# 查看槽位信息
CLUSTER SLOTS

# 查看键所在的槽位
CLUSTER KEYSLOT key

监控与调试

# 实时监控命令
MONITOR

# 查看慢查询日志
SLOWLOG GET
SLOWLOG GET 10
SLOWLOG LEN
SLOWLOG RESET

# 查看客户端列表
CLIENT LIST

# 查看客户端 ID
CLIENT ID

# 杀死客户端
CLIENT KILL ip:port

# 暂停客户端
CLIENT PAUSE 1000

# 查看内存使用
MEMORY USAGE key

# 查看大键
redis-cli --bigkeys

# 查看热点键
redis-cli --hotkeys

# 延迟测试
redis-cli --latency

# 统计信息
redis-cli --stat

配置管理

# 查看配置
CONFIG GET parameter
CONFIG GET maxmemory

# 查看所有配置
CONFIG GET *

# 设置配置
CONFIG SET parameter value
CONFIG SET maxmemory 4gb

# 将配置写入文件
CONFIG REWRITE

# 重置统计信息
CONFIG RESETSTAT

性能优化

# 禁用危险命令(配置文件)
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""

# 设置最大内存
maxmemory 4gb

# 设置内存淘汰策略
maxmemory-policy allkeys-lru

# 设置慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128

常用模式

分布式锁

# 加锁
SET lock:resource "uuid" NX PX 30000

# 解锁(Lua 脚本)
EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end" 1 lock:resource "uuid"

限流

# 滑动窗口限流
EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local current = redis.call('TIME')[1]
local clear = current - window
redis.call('ZREMRANGEBYSCORE', key, 0, clear)
local count = redis.call('ZCARD', key)
if count < limit then
redis.call('ZADD', key, current, current .. ':' .. math.random())
redis.call('EXPIRE', key, window)
return 1
else
return 0
end
" 1 rate_limit:user:1 10 60

缓存穿透防护

# 布隆过滤器
BF.ADD filter item
BF.EXISTS filter item

分布式 Session

# 存储 Session
SETEX session:token 3600 '{"user_id":1,"name":"张三"}'

# 获取 Session
GET session:token

# 刷新过期时间
EXPIRE session:token 3600