You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Redis延迟数据捕获20秒时存入变量即终止的问题?

Redis延迟数据完整捕获方案

问题描述

我需要每日定时更新存储Redis Latency值的文件,目前使用命令redis-cli --latency -h 127.0.0.1 -p 6379,但该命令仅在交互模式下循环输出值。使用timeout 20 /usr/local/bin/redis-cli --latency -h 127.0.0.1 -p 6379可正常运行20秒,但尝试将输出存入变量:

Latency=$(timeout 20 /usr/local/bin/redis-cli --latency -h 127.0.0.1 -p 6379)
echo $Latency

时,命令会立刻停止而非运行满20秒,请问如何将Redis延迟数据完整捕获20秒并存入变量?

原因分析

redis-cli --latency会检测输出环境:如果是终端(TTY),就进入循环输出模式;如果是管道或变量捕获(非TTY),则仅输出一次延迟统计就退出,导致timeout还未到时间进程就提前结束。

解决方法

方法1:模拟终端环境捕获输出

用script命令模拟终端会话,让redis-cli保持循环输出状态:

# 捕获20秒内的所有延迟数据到变量
Latency=$(script -q -c "timeout 20 /usr/local/bin/redis-cli --latency -h 127.0.0.1 -p 6379" /dev/null)
# 用双引号包裹变量,保留换行输出完整内容
echo "$Latency"
  • script -q:静默模式,不显示启动/结束提示信息
  • -c:指定要运行的目标命令
  • /dev/null:避免生成额外的日志文件

方法2:使用专门的周期性输出参数

redis-cli提供--latency-history参数,无需终端环境即可周期性输出延迟数据(默认每1秒输出一次):

# 捕获20秒内的延迟数据,每1秒输出一条记录
Latency=$(timeout 20 /usr/local/bin/redis-cli --latency-history -i 1 -h 127.0.0.1 -p 6379)
echo "$Latency"
  • -i:可自定义输出间隔(单位:秒),比如-i 0.5即为每0.5秒输出一次

方法3:直接写入文件(适合定时任务场景)

如果最终目标是将数据存入文件,可跳过变量直接写入,步骤更简洁:

# 直接将20秒内的延迟数据写入指定日志文件
timeout 20 /usr/local/bin/redis-cli --latency-history -i 1 -h 127.0.0.1 -p 6379 > /path/to/redis_latency.log

内容的提问来源于stack exchange,提问作者indayush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:52:49