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.CSVawk -F, ... DATA.CSV | cat -vetredis-cli GET "Topic:long_ago/speech:" | cat -vet,看看是否可以解决。换行显示为$,回车显示为^M 这是一个讨厌的 Windows 东西。你可以用tr -d '\r' < DATA.CSV > CLEANDATA.CSV删除它

以上是关于redis 怎样想数据库插入数据的主要内容,如果未能解决你的问题,请参考以下文章

怎样在mybatis里向mysql中插入毫秒数的时间?

将查询结果集插入数据表的SQL语句怎样写?

怎样在已经制好的excel图表中插入新的数据制图

Redis的List数据类型及常用命令

右手Redis(快速入门)

我想通过评论框插入大文本。我怎样才能在 PHP 中做到这一点?