redis 怎样想数据库插入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 怎样想数据库插入数据相关的知识,希望对你有一定的参考价值。
参考技术A 确实没有很好的做法。。。按照你这个数量级,就算用并发多线程就没用,基本上要考虑发送服务器集群。本回答被提问者和网友采纳 参考技术B 例子如下:
item1 = Item()
yield item1
item2 = Item()
yield item2
req = Request(url='下一页的链接', callback=self.parse)
yield req
注意:使用yield时不要用return语句。
Redis 大量插入 CSV - 数据未插入到 Redis
【中文标题】Redis 大量插入 CSV - 数据未插入到 Redis【英文标题】:Redis mass insertion CSV - data is not inserting to Redis 【发布时间】:2021-12-13 16:59:15 【问题描述】:我正在尝试使用以下命令将 CSV 数据插入 Redis
Column1 | Column2 |
---|---|
long_ago/speech: | well-done speech |
long-ago/debate: | well-done debate |
long ago/work: | well-done work |
awk -F ',' 'FNR > 1 && $1 && $2 printf("SET Topic:%s %s\n",$1,$2)' data_topics.csv | redis-cli --pipe
期望是我做的时候
GET "Topic:long_ago/speech:"
应该打印
>"well-done speech"
但是当我尝试在 CSV 中插入 1000 行时,我没有得到任何输出。因此尝试使用 CSV 中的上述 3 行并得到以下错误
[admin~]$ awk -F ',' 'FNR > 1 && $1 && $2 printf("SET Topic:%s %s\n",$1,$2)' data_topics.csv | redis-cli --pipe
All data transferred. Waiting for the last reply...
ERR syntax error
ERR syntax error
ERR syntax error
Last reply received from the server.
errors: 3, Replies: 3
所以我尝试在第二列中添加双引号,现在我的 CSV 如下所示
Column1 | Column2 |
---|---|
long_ago/speech: | "well-done speech" |
long-ago/debate: | "well-done debate" |
long ago/work: | "well-done work" |
这是我现在遇到的错误 -
[admin~]$ awk -F ',' 'FNR > 1 && $1 && $2 printf("SET Topic:%s %s\n",$1,$2)' data_topics.csv | redis-cli --pipe
All data transferred. Waiting for the last reply...
ERR Protocol error: unbalanced quotes in request
请帮我将我的 CSV 数据插入 Redis。
【问题讨论】:
在插入数据库之前,您可能需要清理您的值(可能还有您的键)。由于我们不知道您的数据集是什么,因此很难说需要哪种类型的清理。它可以像简单地引用值来处理空格和双引号一样简单。而且您可能不需要修改 CSV。您的 awk 脚本可以即时完成。但是,如果您的值中也有简单的引号(例如,bob's hat
),这还不够。如果您的钥匙也需要消毒,也一样。
您现在应该做的是尝试了解您的数据集出了什么问题。将您的数据集分成两半并尝试插入它们。重复导致错误的一半,直到找到一个导致错误的 CSV 行。查看它并尝试理解问题(空格、引号......)相应地调整您的 awk 脚本并再次测试。
【参考方案1】:
使用名为 data.csv
的 CSV,其中包含以下内容:
long_ago/speech:,well-done speech
long-ago/debate:,well-done debate
long-ago/work:,well-done work
你可以使用:
awk -F, 'printf("SET \"Topic:%s\" \"%s\"\n",$1,$2)' data.csv | redis-cli --pipe
那么你可以这样做:
redis-cli GET "Topic:long_ago/speech:"
"well-done speech"
【讨论】:
这给出的响应为 - $ awk -F, 'printf("SET \"Topic:%s\" \"%s\"\r\n",$1,$2) ' 数据.csv | redis-cli --pipe 传输的所有数据。等待最后一个回复... 从服务器收到的最后一个回复。错误:0,回复:4 > 得到 "Topic:long_ago/speech:" "welldone speech\r" 。每个值的末尾都包含“\r” 您可以尝试从awk
脚本中删除\r
。
很抱歉这么说,但是,已经尝试过了,无论如何它在值中打印\r
,我的 csv 文件数据看起来很干净。
好的,尝试使用cat -vet
来查看回车和换行符,例如cat -vet DATA.CSV
和awk -F, ... DATA.CSV | cat -vet
和redis-cli GET "Topic:long_ago/speech:" | cat -vet
,看看是否可以解决。换行显示为$
,回车显示为^M
这是一个讨厌的 Windows 东西。你可以用tr -d '\r' < DATA.CSV > CLEANDATA.CSV
删除它以上是关于redis 怎样想数据库插入数据的主要内容,如果未能解决你的问题,请参考以下文章