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