如何从redis中的一个大key中删除一部分数据

Laravel
数据量大概是图上的1.5倍左右。
有没有老哥有思路的?
有个比较棘手的是问题是hashKey不知道!
hKeys(),hGetAll()是不是都会把redis搞崩?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

求稳就 HSCAN | Redis,暴力就直接 unlink 掉 key

9个月前 评论
讨论数量: 8

这种数据量就不要使用 HGETALLHKEYS 这种操作了,容易直接把 redis 搞崩。

楼上说的 HSCAN 是一种分析方式。看你这截图大 key 也不是一个两个了,可以通过 BGSAVE 命令把数据库导出来(如果是云服务器,可以在备份中进行下载),在本地或者测试环境的 redis 导入进行分析处理。

在本地或者测试环境就可以随便分析了(别影响到别人即可)。可以通过 HSCAN 的方式遍历字段(这个过程会比较慢),也可以通过暴力点的手段:直接在命令行下执行 redis-cli HGETALL keyname > 01.txt 的方式将结果输出到文本文件中(补充上 redis 的链接信息和 key 名称即可)。

如果仅需要删除 HASH 中的部分字段,可以使用 HDEL 的方式进行删除。这里可以通过 pipeline 的方式批量执行,更快一些。如果是需要删除 key 的话,使用 EXPIRE 命令而不是 DEL 命令,DEL 是同步操作,会阻塞进程。

9个月前 评论
快乐的皮拉夫 (作者) 8个月前
保安 8个月前

求稳就 HSCAN | Redis,暴力就直接 unlink 掉 key

9个月前 评论

这种数据量就不要使用 HGETALLHKEYS 这种操作了,容易直接把 redis 搞崩。

楼上说的 HSCAN 是一种分析方式。看你这截图大 key 也不是一个两个了,可以通过 BGSAVE 命令把数据库导出来(如果是云服务器,可以在备份中进行下载),在本地或者测试环境的 redis 导入进行分析处理。

在本地或者测试环境就可以随便分析了(别影响到别人即可)。可以通过 HSCAN 的方式遍历字段(这个过程会比较慢),也可以通过暴力点的手段:直接在命令行下执行 redis-cli HGETALL keyname > 01.txt 的方式将结果输出到文本文件中(补充上 redis 的链接信息和 key 名称即可)。

如果仅需要删除 HASH 中的部分字段,可以使用 HDEL 的方式进行删除。这里可以通过 pipeline 的方式批量执行,更快一些。如果是需要删除 key 的话,使用 EXPIRE 命令而不是 DEL 命令,DEL 是同步操作,会阻塞进程。

9个月前 评论
快乐的皮拉夫 (作者) 8个月前
保安 8个月前

采用了hscan(),已经跑了15分钟了,目前系统一切稳定!

8个月前 评论

报~~~~

file跑完啦!nice!!!

8个月前 评论
寞小陌 (作者) (楼主) 8个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!