debug redis里面的lua脚本
2025年6月26日15:46:26官方lua脚本文档
https://redis.io/docs/latest/develop/programmability/eval-intro/
https://redis.io/docs/latest/develop/programmability/lua-api/
windows的redis发行版
https://github.com/MicrosoftArchive/redis/releases
windows下也推荐docker版本
https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/windows/
注意:widnows下的redis下是没有debug的,是因为自3.2.100之后,就没有发布windows版本,只有docker版本
linux 帮助文件
# redis-cli --help
redis-cli 8.0.2
用法:redis-cli [选项] [命令 [参数 [参数 ...]]]
-h <hostname> 服务器主机名(默认:127.0.0.1)。
-p <port> 服务器端口(默认:6379)。
-t <timeout> 服务器连接超时时间(秒,允许小数)。
默认超时为 0,即无限制(取决于操作系统)。
-s <socket> 服务器套接字(覆盖主机名和端口)。
-a <password> 连接服务器时使用的密码。
也可使用 REDISCLI_AUTH 环境变量更安全地传递密码
(若两者都使用,此参数优先)。
--user <username>用于发送 ACL 风格的 'AUTH username pass'。需配合 -a 使用。
--pass <password>-a 的别名,为与新的 --user 选项保持一致性。
--askpass 强制用户从标准输入输入带掩码的密码。
若使用此参数,'-a' 和 REDISCLI_AUTH 环境变量将被忽略。
-u <uri> 服务器 URI,格式为 redis://user:password@host:port/dbnum
用户、密码和 dbnum 为可选。无用户名认证时,使用用户名 'default'。
对于 TLS,使用协议 'rediss'。
-r <repeat> 执行指定命令 N 次。
-i <interval> 当使用 -r 时,每个命令间隔 <interval> 秒。
可指定亚秒级时间,如 -i 0.1。
此间隔也用于 --scan 和 --stat 的每个周期,
以及 --bigkeys、--memkeys、--keystats 和 --hotkeys 的每 100 个周期。
-n <db> 数据库编号。
-2 以 RESP2 协议模式启动会话。
-3 以 RESP3 协议模式启动会话。
-x 从标准输入读取最后一个参数(见下方示例)。
-X 从标准输入读取 <tag> 参数(见下方示例)。
-d <delimiter> 原始格式下响应块之间的分隔符(默认:\n)。
-D <delimiter> 原始格式下响应之间的分隔符(默认:\n)。
-c 启用集群模式(跟随 -ASK 和 -MOVED 重定向)。
-e 当命令执行失败时返回退出错误码。
-4 DNS 查找时优先使用 IPv4 而非 IPv6。
-6 DNS 查找时优先使用 IPv6 而非 IPv4。
--tls 建立安全的 TLS 连接。
--sni <host> TLS 的服务器名称指示。
--cacert <file> 用于验证的 CA 证书文件。
--cacertdir <dir>存储可信 CA 证书的目录。
若未指定 cacert 或 cacertdir,将应用系统默认的
可信根证书配置。
--insecure 允许不安全的 TLS 连接(跳过证书验证)。
--cert <file> 用于认证的客户端证书。
--key <file> 用于认证的私钥文件。
--tls-ciphers <list> 设置首选密码套件列表(TLSv1.2 及以下),
按优先级从高到低用冒号(":")分隔。
有关此字符串语法的更多信息,请参阅 ciphers(1ssl) 手册页。
--tls-ciphersuites <list> 设置首选密码套件列表(TLSv1.3),
按优先级从高到低用冒号(":")分隔。
有关此字符串语法的更多信息,请参阅 ciphers(1ssl) 手册页,
特别是 TLSv1.3 密码套件部分。
--raw 使用原始格式输出响应(当标准输出不是终端时默认启用)。
--no-raw 强制格式化输出,即使标准输出不是终端。
--quoted-input 强制将输入视为带引号的字符串。
--csv 以 CSV 格式输出。
--json 以 JSON 格式输出(默认使用 RESP3 协议,若要使用 RESP2,需配合 -2)。
--quoted-json 与 --json 相同,但生成 ASCII 安全的带引号字符串(而非 Unicode)。
--show-pushes <yn> 是否打印 RESP3 PUSH 消息。当标准输出是终端时默认启用,
可通过 --show-pushes no 覆盖。
--stat 打印服务器的滚动统计信息:内存、客户端等。
--latency 进入特殊模式,持续采样延迟。
若在交互式会话中使用此模式,将永久运行并显示实时统计。
否则,若指定了 --raw 或 --csv,或输出重定向到非终端,
将采样延迟 1 秒(可使用 -i 更改间隔),然后生成单次输出并退出。
--latency-history类似 --latency,但跟踪延迟随时间的变化。
默认时间间隔为 15 秒。可使用 -i 更改。
--latency-dist 以频谱形式显示延迟,需要支持 256 色的 xterm。
默认时间间隔为 1 秒。可使用 -i 更改。
--lru-test <keys>模拟 80-20 分布的缓存工作负载。
--replica 模拟从节点,显示从主节点接收的命令。
--rdb <filename> 将远程服务器的 RDBdump 传输到本地文件。
文件名使用 "-" 表示写入标准输出。
--functions-rdb <filename> 类似 --rdb,但获取 RDB dump 文件时仅包含函数(不含键)。
--pipe 将标准输入的原始 Redis 协议传输到服务器。
--pipe-timeout <n> 在 --pipe 模式下,发送所有数据后若在 <n> 秒内未收到回复,
则报错中止。
默认超时:30 秒。使用 0 表示无限等待。
--bigkeys 采样 Redis 键,查找包含大量元素(复杂度高)的键。
--memkeys 采样 Redis 键,查找消耗大量内存的键。
--memkeys-samples <n> 采样 Redis 键,查找消耗大量内存的键,
并指定要采样的键元素数量。
--keystats 采样 Redis 键,查找键的内存大小和长度(结合 bigkeys 和 memkeys)。
--keystats-samples <n> 采样 Redis 键,查找键的内存大小和长度,
并指定要采样的键元素数量(仅用于内存使用)。
--cursor <n> 从游标 <n> 开始扫描(通常在 Ctrl-C 之后)。
可配合 --keystats 和 --keystats-samples 使用。
--top <n> 显示 <n> 个最大的键大小(默认:10)。
可配合 --keystats 和 --keystats-samples 使用。
--hotkeys 采样 Redis 键,查找热点键。
仅当 maxmemory-policy 为 *lfu 时有效。
--scan 使用 SCAN 命令列出所有键。
--pattern <pat> 使用 --scan、--bigkeys、--memkeys、--keystats 或 --hotkeys 时的键模式
(默认:*)。
--count <count> 使用 --scan、--bigkeys、--memkeys、--keystats 或 --hotkeys 时的 count 选项
(默认:10)。
--quoted-pattern <pat> 与 --pattern 相同,但指定的字符串可被引用,
以便传递原本非二进制安全的字符串。
--intrinsic-latency <sec> 运行测试以测量系统固有延迟。
测试将运行指定的秒数。
--eval <file> 使用 <file> 中的 Lua 脚本发送 EVAL 命令。
--ldb 与 --eval 配合使用,启用 Redis Lua 调试器。
--ldb-sync-mode 类似 --ldb,但使用同步 Lua 调试器,
在此模式下服务器会被阻塞,且脚本更改不会从服务器内存中回滚。
--cluster <command>
集群管理命令和参数(见下文)。
--verbose 详细模式。
--no-auth-warning在命令行界面使用密码时不显示警告信息。
--help 输出此帮助信息并退出。
--version 输出版本信息并退出。
集群管理命令:
使用 --cluster help 列出所有可用的集群管理命令。
示例:
redis-cli -u redis://default:PASSWORD@localhost:6379/0
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli -D "" --raw dump key > key.dump && redis-cli -X dump_tag restore key2 0 dump_tag replace < key.dump
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --quoted-input set '"null-\x00-separated"' value
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
redis-cli --scan --pattern '*:12345*' --count 100
(注意:使用 --eval 时,逗号用于分隔 KEYS[] 和 ARGV[] 参数)
当未指定命令时,redis-cli 以交互模式启动。
在交互模式下输入 "help" 可获取可用命令和设置的信息。同步模式(阻塞整个 Redis 服务,慎用) 某些特殊场景
redis-cli --ldb-sync-mode --eval your_script.lua key1 key2 , arg1 arg2启动调试(非阻塞模式,不影响生产环境)
redis-cli --ldb --eval your_script.lua key1 key2 , arg1 arg2
# redis-cli --ldb --eval 1.lua
Lua debugging session started, please use:
quit -- End the session.
restart -- Restart the script in debug mode again.
help -- Show Lua script debugging commands.
* Stopped at 1, stop reason = step over
-> 1 local zKey = 'bt:order:xxxx';
lua debugger> help
Redis Lua 调试器帮助:
help 显示此帮助信息。
step 执行当前行并再次暂停。
next step 的别名。
continue 运行到下一个断点。
list 列出当前行附近的源代码。
list 列出 附近的源代码。
line = 0 表示:当前位置。
list 在此形式中, 指定显示 前后的行数。
whole 列出所有源代码。相当于 'list 1 1000000' 的别名。
print 显示所有局部变量。
print <var> 显示指定变量的值。
也可以显示全局变量 KEYS 和 ARGV。
break 显示所有断点。
break <line> 在指定行添加断点。
break -<line> 从指定行移除断点。
break 0 移除所有断点。
trace 显示调用栈追踪。
eval执行一些 Lua 代码(在不同的调用帧中)。
redis <cmd> 执行一条 Redis 命令。
maxlen 将记录的 Redis 回复和 Lua 变量 dump 截断到 len 长度。
指定 <len> 为 0 表示无限制。
bort 停止脚本执行。在同步模式下,数据集的更改将被保留。
可从 Lua 脚本中调用的调试器函数:
redis.debug () 在调试器控制台中生成日志。
redis.breakpoint () 停止执行,就像下一行代码有一个断点一样。
lua debugger>
使用举例/** 注意:这里所有的参数带到lua里面的时候,都会带 REDIS_PREFIX的前缀,这里的lua脚本不好debug,没事不要随便改5 代表 参数数量*/$res = Redis::eval($script, 5, $zKey, $hKeyPrefix, $start, $end, $delScore);$script =
页:
[1]