Redis入门(redis-cli 8.2.1)
1 Redis常用命令
官方文档:https://redis.io/commands
https://redis.io/commands
Redis命令参考:
http://doc.redisfans.com/
http://doc.redisfans.com/Redis中文开发手册:
https://www.php.cn/manual/view/36359.html
https://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











