当前位置:首页 > 问答 > 正文

想知道Redis啥时候启动过?教你怎么看运行历史和启动时间信息

想知道你的Redis服务什么时候启动过?这个问题看似简单,但其实Redis本身并没有一个直接的命令像“show startup time”那样,一敲下去就告诉你一个精确到秒的启动时间戳,不过别担心,我们完全可以通过一些内置命令和系统层面的方法,像侦探一样拼凑出完整的线索,弄清楚它的运行历史和启动时间,下面我就来教你几种实用的方法。

查看Redis的“运行时长”——INFO命令

这是最常用、也是最直接的方法,Redis提供了一个强大的INFO命令,它能返回关于Redis服务器的各种信息和统计数据,在这些信息中,有一块叫做“Server”的部分,里面就藏着我们需要的线索。

具体操作是,连接到你的Redis服务器(比如用redis-cli),然后输入命令 INFO server,在返回的一大堆信息中,你需要找到这两行:

  • uptime_in_seconds:这个值表示Redis服务器已经运行了多少秒。
  • uptime_in_days:这个值是uptime_in_seconds的人类友好版,直接告诉你运行了多少天。

(信息来源:Redis官方文档关于INFO命令的说明)

启动时间怎么算呢?很简单,用你当前的时间减去uptime_in_seconds就行了,比如说,你现在是北京时间2023年10月27日下午3点,如果uptime_in_seconds的值是7200(也就是2小时),那么Redis的启动时间就是今天下午1点。

这个方法非常快捷,能让你立刻知道一个大概的启动时间点,但它的缺点是,一旦Redis重启,这个计时就会清零重算,你只能知道最后一次启动是什么时候,无法看到更早的历史记录。

挖掘系统的“日志档案”——查看系统日志

想知道Redis啥时候启动过?教你怎么看运行历史和启动时间信息

如果你想看到更久以前的启动记录,甚至了解每次启动的原因(是正常维护还是意外崩溃),那么系统日志就是你的最佳帮手,Redis在启动和关闭时,通常会在系统的日志文件中留下记录。

在不同的操作系统上,日志的位置和查看方式略有不同:

  • Linux系统(使用Systemd):现在大多数Linux发行版都用systemd来管理服务,你可以使用journalctl命令来查看Redis的日志,打开终端,输入: sudo journalctl -u redis-server.service --no-pager 这个命令会列出Redis服务相关的所有日志,你可以仔细查找包含“Started”或“Starting”的行,那通常就是启动的标志,如果日志太多,你可以用-f参数来实时查看最新日志,或者用--since--until来按时间过滤。 (信息来源:Linux systemd 的 journalctl 手册页)

  • Linux系统(使用SysVinit或Upstart):对于一些较老的系统,日志可能写在/var/log/目录下的特定文件里,常见的文件名可能是/var/log/redis/redis-server.log或者/var/log/syslog,你可以用grep命令来过滤, grep "Redis" /var/log/syslog 或者更精确地查找启动信息: grep "started" /var/log/redis/redis-server.log

  • Windows系统:如果Redis作为Windows服务运行,你可以通过“事件查看器”来查看,打开事件查看器(可以在开始菜单搜索),然后依次展开“Windows 日志” -> “应用程序”,在右侧的日志列表中,查找“来源”为“Redis”的事件,信息级别的事件通常包含了服务的启动和停止记录。

查看系统日志的好处是,它像一个忠实的记录员,只要日志文件没有被清理掉,你就能回溯到很久以前的启动事件,这对于排查问题、分析系统稳定性非常有帮助。

想知道Redis啥时候启动过?教你怎么看运行历史和启动时间信息

寻找“进程足迹”——使用系统命令

除了查看Redis自身和系统日志,我们还可以从操作系统的进程层面寻找痕迹,有些系统命令或工具会记录进程的启动时间。

在Linux系统中,有一个很实用的命令叫ps,我们可以用它来显示Redis进程的详细信息,在终端中输入:

ps -eo pid,comm,lstart,cmd | grep redis-server

我来解释一下这个命令:

  • -eo pid,comm,lstart,cmd 是参数,意思是按照我们指定的格式(PID、命令名、详细的启动时间、完整的命令行)来显示所有进程的信息。
  • grep redis-server 是从所有进程中筛选出Redis相关的进程。

执行后,你会看到一行输出,其中lstart那一列就是Redis进程被操作系统启动的精确日期和时间,这个方法获取的启动时间和用INFO命令计算出来的结果应该是一致的,它提供了另一个快速的验证途径。 (信息来源:Linux ps 命令手册页)

想知道Redis啥时候启动过?教你怎么看运行历史和启动时间信息

配置“专属记录员”——让Redis自己记录启动时间

如果以上方法都觉得不够直接,你还可以考虑一劳永逸的方案:让Redis在每次启动时,主动把一个时间戳保存到一个特定的键里面。

这个想法可以通过Redis的“脚本”功能来实现,你可以在Redis的配置文件中找到一个叫lua-time-limit的配置(虽然这个配置的本意是限制Lua脚本的执行时间,但我们能利用脚本做更多事),更常见的做法是,结合外部的启动脚本,在启动Redis服务的shell脚本(例如/etc/init.d/redis或systemd的Service单元文件里的ExecStartPost指令)中,在成功启动Redis后,立刻执行一条命令:

redis-cli SET redis:startup:last "2023-10-27 15:00:00"

上面的时间最好是脚本通过date命令动态获取的,这样每次启动都会自动记录下准确的时间戳,以后你想知道启动时间,只需要用GET redis:startup:last命令就能直接读出来,非常方便。

总结一下

想知道Redis什么时候启动过,你有好几条路可以走:

  • 图快、看最近一次:用INFO server命令查uptime_in_seconds,然后自己算一下。
  • 查历史、找原因:去翻看系统的日志文件(journalctl/var/log/下的文件)。
  • 系统层面验证:用ps命令查看进程启动时间。
  • 一劳永逸:修改启动脚本,让Redis自动记录时间戳。

每种方法都有自己的适用场景,你可以根据实际需要灵活选择,希望这些方法能帮你轻松掌握Redis的“作息时间”!