本文共 1162 字,大约阅读时间需要 3 分钟。
发现 Redis 使用量突然暴增,紧急扩容 Redis 时不能影响服务运行。扩容后,立即查找原因,突破口是寻找存在哪些大 key。
下载 Redis 的持久化文件 dump.rdb 到本地。Redis 的持久化文件通常以 rdb 格式存储,配置文件中可以找到 dump.rdb 的存储路径。
使用 rdbtools 生成内存报告。rdbtools 是一个用 Python 开发的工具,生成内存报告的命令为 rdb -c memory,将 dump.rdb 文件指定为输入文件,输出到 CSV 文件。注意:rdb 文件越大,生成时间越长。
对生成的内存报告进行排序,找出占用最高的 key。使用 Linux 的 sort 命令按内存列排序,排序结果保存到新的文件中。
查看排序后的前 1000 个数据,进一步确认哪些 key 占用了最多内存。使用 awk 和 head 命令提取关键信息。
计算特定 key 占用的内存总量。使用 grep 和 awk 命令提取相关数据,计算总和。
删除占用最高内存的 key。使用 redis-cli 模糊匹配 key,删除对应的数据。命令为 redis-cli -h 127.0.0.1 -p 6379 keys 'my_ranking_list*' | xargs redis-cli -h 127.0.0.1 -p 6379 del。
在本地启动 Redis 加载 dump.rdb 文件时,发现一直 load 失败。经过长时间调试,终于找到原因:Redis 配置文件中 databases 参数需要修改为 256,因为原始 dump.rdb 文件对应的 Redis 实例使用了 256 个数据库,默认值为 16。修改后,Redis 成功加载持久化文件。
参考资料: