Redis02:库切换、监控与安全配置

目录

4.redis的不同库切换和运维监控命令

[Redis 不同数据库的切换](#Redis 不同数据库的切换)

[查看 key](#查看 key)

监控命令

[Info 常用信息说明(Zabbix 监控参考)](#Info 常用信息说明(Zabbix 监控参考))

[单独查看某一块 info 内容](#单独查看某一块 info 内容)

.

[5. redis配置的动态更新](#5. redis配置的动态更新)

[Redis 更新配置两种方式](#Redis 更新配置两种方式)

[查看 Redis 连接相关](#查看 Redis 连接相关)

动态修改最大连接数示例

.

6Redis的多用户权限管理

基础查看命令

[ACL SETUSER创建用户](#ACL SETUSER创建用户)

实操案例

[1:只读用户 test,仅访问 name * 前缀 key](#1:只读用户 test,仅访问 name * 前缀 key)

2:赋予全部权限

[3:全部权限,但禁止 config 高危命令](#3:全部权限,但禁止 config 高危命令)

[4:监控账号,只允许 info、monitor](#4:监控账号,只允许 info、monitor)

删除用户

持久化关键点

.

7.redis的慢日志和key的有效期

[1. 查看慢日志的默认配置](#1. 查看慢日志的默认配置)

[2. 设置慢日志阈值:超过 1 毫秒记慢日志](#2. 设置慢日志阈值:超过 1 毫秒记慢日志)

3查询慢日志相关命令

[4Slowlog 各字段含义](#4Slowlog 各字段含义)

[5Redis 的 key 的有效期](#5Redis 的 key 的有效期)

.

8.redis禁用危险命令和压测工具介绍

[Redis 禁用危险命令](#Redis 禁用危险命令)

危险命令

配置禁用

[Redis 压测工具 redis‑benchmark](#Redis 压测工具 redis‑benchmark)

常用参数

执行压测


4.redis的不同库切换和运维监控命令

Redis 不同数据库的切换

Redis 内置逻辑数据库,默认 16 个,编号 0‑15 ,配置项 databases 16

各个库之间数据互相独立隔离。同一个 key 名字,在 db0 和 db2 可以存完全不同的值,互不干扰。

复制代码
# 查看库总数量(Linux终端执行)
grep databases /etc/redis.conf

切换数据库 select

复制代码
select 0     # 切换到0号库(登录默认就在0库)
select 1     # 切换到1号库
select 16    # 报错!最大编号是15,没有16号库

查看 key

复制代码
RANDOMKEY      #随机获取一个key
KEYS *         #查看所有key,注意阻塞,如果key量特别大时候,容易卡死阻塞,上千万上百万时候容易阻塞
SCAN 0         #建议使用,每次获取11个key,可以循环获取,直到获取所有key
#从编号0开始,中间会有一个编号提示(类似索引编号),按编号提示依次循环获取,直到编号为0即表示获取完所有的key
  1. RANDOMKEY 随机从当前数据库返回一个 key,不会遍历全量数据,无阻塞风险,适合抽样查看。

  2. KEYS * 遍历当前库全部 key 一次性返回。

  3. SCAN 0#建议使用,每次获取 11 个 key,可以循环获取,直到获取所有 key

    #从编号 0 开始,中间会有一个编号提示 (类似索引编号),按编号提示依次循环获取,直到编号为 0 即表示获取完所有的 key

监控命令

bash 复制代码
redis-cli -a redispwd --stat        #监控Redis状态

1多客户端接入、新增 key,指标会实时变化。

redis-cli -a redispwd monitor #监控数据操作

交互式阻塞输出,实时记录所有客户端执行的增、删、改命令。

⚠️高并发生产环境慎用,会消耗大量 CPU。

2 输出全量运行信息,供Zabbix等监控系统采集

bash 复制代码
bashredis-cli -a redispwd info        

Info 常用信息说明(Zabbix 监控参考)

  1. Server:服务器基础信息,包含 Redis 版本、运行时长、进程 ID 等。
  2. Clients:客户端连接状态,包含当前连接数、阻塞客户端数、最大连接限制等。
  3. Memory :Redis 内存占用核心指标。
    • used_memory:数据集实际占用的内存大小。
    • used_memory_rss:操作系统分配给 Redis 的实际物理内存。
    • mem_fragmentation_ratio:内存碎片率,反映内存使用效率。
    • maxmemory:配置的最大内存上限。
  4. Persistence :持久化存储状态信息。
    • rdb_*:RDB 快照相关状态与耗时。
    • aof_enabled:0:AOF 持久化开关,默认关闭。
  5. Stats:运行状态统计信息,是监控重点,包含 QPS、缓存命中率、驱逐键数量等。
  6. Replication :主从复制与哨兵状态监控信息。
    • role:master:当前实例角色(主/从)。
    • connected_slaves:0:已连接的从节点数量。
  7. CPU:CPU 资源消耗,包含内核态(sys)与用户态(user)占用。
  8. Cluster:Redis 集群专属信息,包含集群状态、节点数量等。
  9. Keyspace:键空间分布信息,包含各数据库的 key 数量、过期 key 数量及平均 TTL。

单独查看某一块 info 内容

只输出指定模块,减少输出内容,监控脚本常用

复制代码
redis-cli -a redispwd info Server
redis-cli -a redispwd info Clients
redis-cli -a redispwd info Memory

.

5. redis配置的动态更新

Redis 更新配置两种方式

  1. 重启更新:修改配置文件,重启 Redis 生效
  2. 实时动态更新:无需重启,运行时修改

重启方式修改密码

复制代码
vim /etc/redis.conf
requirepass 123456
# 修改保存后重启redis生效

动态更新密码(不重启)

复制代码
# 查看当前密码
config get requirepass

# 动态设置密码
config set requirepass 123456

# 将运行时配置写入redis.conf持久保存
config rewrite

config set只是内存生效;必须执行config rewrite才会把配置写入配置文件,否则重启后配置丢失

查看 Redis 连接相关

复制代码
info clients        # 查看当前客户端连接数
config get maxclients  # 查看允许的最大客户端连接数

动态修改最大连接数示例

复制代码
# 查询当前最大连接,默认10000
config get maxclients

# 动态修改为20000(内存立即生效)
config set maxclients 20000

# 验证修改结果
config get maxclients

# 写入配置文件永久保存
config rewrite

.

6Redis的多用户权限管理

默认超级用户:default,拥有全部权限。

基础查看命令

复制代码
ACL LIST                  # 列出全部用户
ACL GETUSER default       # 查看指定用户详细权限
ACL CAT                   # 查看所有权限分类(read/write/admin/dangerous等)

ACL SETUSER创建用户

ACL SETUSER 语法拆解

复制代码
ACL SETUSER <用户名> <on|off> >密码 ~key模式 +命令/-命令
  • on:启用用户;off禁用用户
  • >xxx:设置用户密码
  • ~pattern:key 匹配规则,~*代表所有 key;~name*只匹配 name 开头的 key
  • +cmd:增加命令权限;-cmd移除命令权限
  • +@分类:授予某一类全部命令,例如+@read授予全部读命令,+@all全部权限

实操案例

1:只读用户 test,仅访问 name * 前缀 key

复制代码
# 创建用户test,密码testpwd,仅对name*开头key拥有全部读权限
ACL SETUSER test on >testpwd ~name* +@read

# 查看用户权限
ACL GETUSER test

登录两种方式

复制代码
# 连接内认证
auth test testpwd

# 命令行登录
redis-cli --user test --pass testpwd

权限效果:

  • get name1 正常读取
  • get k1 无权限(key 不匹配)
  • set k3 v3 无写权限

2:赋予全部权限

复制代码
ACL SETUSER test1 on >test1pwd ~* +@all

3:全部权限,但禁止 config 高危命令

复制代码
ACL SETUSER test2 on >test2pwd ~* +@all -config

适合业务应用账号,禁止修改 Redis 运行配置。

4:监控账号,只允许 info、monitor

复制代码
ACL SETUSER monitor on >monitorpwd ~* +info +monitor

监控程序专用账号,不能读写业务 key,仅允许查看状态。

删除用户

复制代码
ACL DELUSER t666
ACL LIST

持久化关键点

通过ACL SETUSER是内存中生效,重启 Redis 会丢失用户!

复制代码
config rewrite

执行config rewrite,会将 ACL 用户信息写入 redis.conf,重启账号权限保留。

.

7.redis的慢日志和key的有效期

1. 查看慢日志的默认配置

复制代码
CONFIG GET slow*   #查看慢日志的配置

返回结果:

单位微秒ns,1000ns=1ms

复制代码
1) "slowlog-max-len"
2) "128"        #最多记录128个
3) "slowlog-log-slower-than"
4) "10000"      #默认超过10毫秒就会记录(单位微秒)

2. 设置慢日志阈值:超过 1 毫秒记慢日志

复制代码
config set slowlog-log-slower-than 1000   #设置慢日志的时间是1毫秒,查询超过1毫秒就为慢日志
CONFIG GET slow*                           #查看配置

返回:

复制代码
1) "slowlog-max-len"
2) "128"
3) "slowlog-log-slower-than"
4) "1000"     #1毫秒为慢日志

3查询慢日志相关命令

复制代码
SLOWLOG get      #默认获取最近10条
SLOWLOG get 5    #获取5条
SLOWLOG len      #慢日志量,查看慢日志的条数
SLOWLOG reset    #清空慢日志

4Slowlog 各字段含义

复制代码
127.0.0.1:6379> config get slow*
1) "slowlog-max-len"
2) "128"
3) "slowlog-log-slower-than"
4) "1000"

127.0.0.1:6379> slowlog get
1) 1) (integer) 2
   2) (integer) 1786181610
   3) (integer) 2549
   4) 1) "keys"
      2) "*"
   5) "127.0.0.1:58272"
   6) ""
2) 1) (integer) 1
   2) (integer) 1786181609
   3) (integer) 2118
   4) 1) "keys"
      2) "*"
   5) "127.0.0.1:58272"
   6) ""

5Redis 的 key 的有效期

给 Redis 的 key 设置有效期:

  • -1 表示永久
  • -2 代表 Redis 回收了(key 已经自动删除)
复制代码
set name test1    #默认设置的key是永久有效的
get name
"test1"

ttl name          #查看key的状态,生命周期,-1表示永久有效
(integer) -1

expire name 20    #方法1:给key设置有效期,单位:秒,设置有效期是20s

set name2 test02 EX 20	#方法2:创建key的时候直接给key设置有效期:20s

.

8.redis禁用危险命令和压测工具介绍

Redis 禁用危险命令

危险命令

命令 危害
FLUSHALL 清空 Redis 全部数据库所有数据
FLUSHDB 清空当前 db 的全部 key 数据
KEYS * 遍历全部 key,大数据量阻塞主线程,卡死业务

配置禁用

修改 redis 配置文件 /etc/redis.conf,添加rename-command把命令重命名为空字符串,修改后必须重启 redis 生效

复制代码
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""

测试:执行keys *flushall,命令直接失效。

Redis 压测工具 redis‑benchmark

常用参数

复制代码
redis-benchmark --help
  • -c <clients>:并发客户端数量,默认 50
  • -n <requests>:总请求数,默认 100000

执行压测

复制代码
# 默认参数压测:50并发,10万请求
redis-benchmark -a redispwd

# 压测同时保存输出日志
redis-benchmark -a redispwd | tee /tmp/a.log

# 指定总请求数10,默认50并发
redis-benchmark -a redispwd -n 10

打开日志文件:vim /tmp/a.log

  1. PING_INLINE:ping 连通性测试

    100000 requests completed in 1.10 seconds
    50 parallel clients
    3 bytes payload
    100.000% <= 2.527 milliseconds

  • 10 万请求,50 并发,每个请求 3 字节;100% 请求延迟小于 2.527ms
  1. SET 命令结果样例

    100000 requests completed in 1.07 seconds
    50 parallel clients
    3 bytes payload
    ......
    throughput summary: 93370.68 requests per second #QPS,每秒处理93370次set请求
    latency summary (msec):
    avg min p50 p95 p99 max
    0.302 0.072 0.247 0.599 1.111 2.183

  2. GET 命令结果样例

    100000 requests completed in 1.12 seconds
    50 parallel clients
    3 bytes payload
    ......
    throughput summary: 89445.44 requests per second #每秒处理89445次get请求
    latency summary (msec):
    avg min p50 p95 p99 max
    0.326 0.048 0.255 0.687 1.311 2.447

指标说明

  • avg:平均延迟;min最小延迟;max最大延迟
  • p50/p95/p99:百分位延迟,p99 代表 99% 请求耗时低于该数值
  • throughput summary:QPS,每秒处理请求数量

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

相关推荐
Eloudy1 小时前
给 Linux 加新硬盘的挂载命令
linux·运维·服务器
海上小飞龙1 小时前
Redis 持久化:RDB 与 AOF
数据库·redis·缓存
hold?fish:palm1 小时前
redis中AOF 重写机制解析
数据库·c++·redis
三言老师2 小时前
ss高效查看网络连接端口实操
linux·运维·服务器·网络
三言老师2 小时前
traceroute路由追踪实操
linux·运维·服务器·网络
我是小灰灰吖2 小时前
Ubuntu 22.04 切换为 X11 会话以解决 QT 桌面程序兼容性问题
linux·qt·ubuntu
荒--2 小时前
kali 操作基础(二)
linux·网络
XH华2 小时前
Linux系统第四章:工具的学习
linux·运维·学习
刚入门的大一新生2 小时前
Linux-基础开发工具1
linux·运维·服务器