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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

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

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

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

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

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

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

8个月前 评论

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

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

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

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

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

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

8个月前 评论

报~~~~

file跑完啦!nice!!!

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

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