1 Redis常用命令

官方文档:https://redis.io/commandshttps://redis.io/commands

Redis命令参考:

http://doc.redisfans.com/http://doc.redisfans.com/Redis中文开发手册:

https://www.php.cn/manual/view/36359.htmlhttps://www.php.cn/manual/view/36359.html

1.1 INFO

获取 Redis 服务器的状态、性能指标及软硬件系统信息。

info

# 显示指定部分的内容
info server
info cluster

1.2 SELECT

在不同的数据库(通常是 0-15)之间进行切换。默认数据库为0。

select 0
select 1

注意:在 Redis cluster 模式下不支持更换数据库:

(error) ERR SELECT is not allowed in cluster mode

1.3 SET/GET/EXISTS/DEL

命令 核心功能 语法示例 典型返回值
SET 设置/覆盖键值对 SET key "value" OK
GET 读取键的值 GET key "value" (不存在返回 nil)
EXISTS 检查键是否存在 EXISTS key 1 (存在) / 0 (不存在)
DEL 删除指定的键 DEL key 被成功删除的键的数量

批量设置和读取

mset a 1 b 2 c 3
gset a b c

1.4 EXPIRE/TYPE

命令 核心作用 常用场景 时间复杂度
EXPIRE 设置键的有效期 验证码倒计时、临时缓存、限流 O(1)
TYPE 查询键的数据类型 调试代码、确认键是否被意外覆盖 O(1)
# 1. 存入验证码
SET code "123456"

# 2. 设置 30 秒后过期
EXPIRE code 30

# 3. 配合 TTL 命令查看剩余寿命
TTL code
返回值 键的状态 动作建议
大于 0 的整数 正在倒计时 无需操作,等待自动过期。
-1 永不过期 如果它是临时数据,记得手动删掉省内存。
-2 已消失 / 不存在 如果业务需要,请重新 SET 该键。

1.5 DBSIZE

返回当前数据库里的键总数。

dbsize

1.6 FLUSHDB/FLUSHALL

强制清空当前中的所有key(注意:生产环境慎用

flushdb
flushall

1.7 SHUTDOWN

时间复杂度:O(N),其中 N 为关机时需要保存的数据库键数量。(注意:生产环境慎用

  • 安全停机:它不是简单的“拔电源”,而是先切断所有客户端连接,确保没有新数据干扰。

  • 自动备份:只要你开启了持久化(RDB 或 AOF),它会在关机前自动保存最后一次数据,防止数据丢失。

  • 强制原子性:它比手动执行 SAVE + QUIT 更安全,因为后者在两次命令的空档期可能会漏掉新写入的数据。

  • 操作建议:在生产环境中关机,务必优先使用 SHUTDOWN;如果想不保存直接关,才用 SHUTDOWN NOSAVE

1.8 KEYS

根据匹配模式(如 *)查找所有符合条件的键(注意:生产环境慎用

命令 时间复杂度
keys O(n)
dbsize O(1)
del O(1)
exists O(1)
expire O(1)
type O(1)
keys *

Redis生产环境安全加固

建议操作 理由
禁用 KEYS $O(n)$ 复杂度,在百万级数据下会导致 Redis 瞬间卡死(阻塞)。
禁用 SHUTDOWN 防止因误操作导致服务意外停止。
禁用 FLUSHALL/DB 防止“删库跑路”悲剧,确保数据安全。

#议禁用此指令

vim /etc/redis.conf

# 彻底禁用高危命令(将命令重命名为空字符串)
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command KEYS     ""
rename-command SHUTDOWN ""

# 或者:将其重命名为一段随机字符串(仅运维内部掌握)
# rename-command FLUSHALL "FLUSHALL_SECRET_99"
# 逻辑:如果匹配到 rename-command XXX,则替换整行为禁用格式;
# 如果没匹配到,则在文件末尾添加。
file="/etc/redis.conf"
for cmd in FLUSHALL FLUSHDB KEYS SHUTDOWN; do
    if grep -q "rename-command $cmd" "$file"; then
        # 存在则替换
        sudo sed -i "s/^.*rename-command $cmd.*/rename-command $cmd \"\"/" "$file"
    else
        # 不存在则追加
        sudo sed -i "$ a rename-command $cmd \"\"" "$file"
    fi
done

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐