*Redis LASTSAVE 命令
LASTSAVE 返回最近一次成功执行 RDB 持久化(如 SAVE 或 BGSAVE)的 Unix 时间戳(秒)。用于监控数据持久化状态。
*语法
LASTSAVE
*参数说明
本命令不接受任何参数。
*返回值
- Integer:最近一次成功 RDB 保存的 Unix 时间戳(秒)
- Integer (0):如果从未执行过成功的持久化操作
*时间复杂度
O(1)
*
*示例
*基本用法
> LASTSAVE
(integer) 1717489200
*监控持久化延迟
> TIME
1) (integer) 1717489500
2) (integer) 123456
> LASTSAVE
(integer) 1717489200
通过 TIME[0] - LASTSAVE 计算距离上次持久化的时间差。
*结合 BGSAVE 检查
> BGSAVE
Background saving started
> LASTSAVE
(integer) 1717489200
# 等待几秒后
> LASTSAVE
(integer) 1717489510
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| (本命令无常见错误) |
*最佳实践
- 在监控脚本中配合 TIME 命令计算
TIME[0] - LASTSAVE,如果差值超过阈值(如 1 小时),触发告警 - 仅反映 RDB(SAVE / BGSAVE)的成功时间,不反映 AOF 的持久化状态。监控 AOF 应使用
INFO persistence - 主从复制中,从节点的 LASTSAVE 反映其自身 BGSAVE 的时间,与主节点无关
- 集群模式下每个节点独立维护 LASTSAVE 时间戳
*FAQ
Q1: LASTSAVE 返回 0 是什么意思? A: 表示自 Redis 启动以来,从未成功执行过 SAVE 或 BGSAVE。常见于纯 AOF 模式或新启动的实例。
Q2: LASTSAVE 能反映 AOF 的写入时间吗?
A: 不能。LASTSAVE 仅记录 RDB 持久化(SAVE / BGSAVE)的成功时间。AOF 的持久化状态需要通过 INFO persistence 中的 aof_last_write_status 和 aof_last_bgrewrite_status 查看。
Q3: BGSAVE 执行失败后 LASTSAVE 会更新吗? A: 不会。LASTSAVE 只在持久化成功完成时更新。如果 BGSAVE 失败,LASTSAVE 保持上一次成功的时间戳。