周五晚上,研发同事突然发现线上环境中的客户数据出现异常,对于redis中的resource_info中的部分field需要进行删除。

2024-01-08T02:03:22.png

当看到研发同事一个一个进行删除的时候,与他们进行讨论,为啥要一个一个删呢,可以写个脚本进行删除呢。

问同事要来了json文件,而需要删除的field是其中的一个字段。

整理好后,通过vim打开文件并将开头结尾的引号以及结尾的分号删除掉,然后使用命令和管道

cat xx.txt | xargs -i redis-cli -c -h xxx -p port -a password HDEL resource_info {} 

没想到报了一堆0
2024-01-08T02:06:22.png

时间紧,于是打开xx.txt,在每行开头加入命令resis-cli -c -h ...
没想到还是报错
2024-01-08T02:07:34.png

难道是执行太快了,于是在每行命令结尾加上;sleep 2
没想到redis命令返回了1,但是报了其他的错误
2024-01-08T02:08:17.png

需求满足了,但是为啥报错呢?

后来想了下,原来同事是在windows里面生成的json文件,这个文件每行结尾是\r\n,而在linux里面会把\n作为结尾,\r也会当做命令字符一并加入到字符串中,也就是为啥报sleep: 无效的时间间隔"2\r",也是为啥开始使用cat 和 xargs并用管道连接的时候报错了。

最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏