当前位置: 首页 > 面试题库 >

redis-大量插入和计数器

解沈义
2023-03-14
问题内容

这是我在stackoverflow上遇到的第一个问题。亲爱的社区,非常感谢您的综合知识和专业知识!

我是Redis的新手,所以请耐心等待,因为我敢肯定有一个简单的解决方案。

redis-server --version

=> Redis服务器v = 2.6.14 sha = 00000000:0 malloc = libc位= 64

redis-cli --version

=> redis-cli 2.6.14

我已阅读“如何使用Redis大容量插入?”如何使用Redis大容量插入?
我在Google上搜索并阅读了很多关于Redis INCR功能的赞美。但是我并不真正理解所有内容,并且它也无济于事-仅在内部进行。

我的目标:我想将’n’文本行导入redis,然后以完全相同的顺序检索它们。

我为每一行设置一个唯一的键,例如key:1,key:2,key:3等。通过使用递增计数器作为键的一部分,我以后可以按存储它们的相同顺序检索这些行。在Redis中。

现在(不使用redis大量插入),我可以通过使用awk脚本生成redis-cli调用来轻松解决此问题,例如:

cat data.txt | awk -f myscript.awk | bash

“ data.txt”看起来像这样:
这是第一行。
这是更长的第二行。

“ myscript.awk”看起来像这样:

#!/usr/bin/awk -f

### This section is being applied before any line is read:
BEGIN {
# Set counter initially to Zero
print "redis-cli SET counter 0"
}

### This section is being applied per line read into awk:
{
# Increase counter by One
print "redis-cli INCR counter"
# Read current counter from redis into an variable
print "MYCOUNTER=`redis-cli GET counter`"
# Use this variable as counter for the key
print "redis-cli SET key:$MYCOUNTER \"" $0 "\""
# Retrive stored value from redis for illustration
print "redis-cli GET key:$MYCOUNTER"
}

“ cat data.txt | awk -f myscript.awk | bash”的输出为:

OK
(integer) 1
OK
"This is the first line."
(integer) 2
OK
"This here is the much longer second line."

所以一切都很好。

但是,我不想使用每个导入行两次调用“ redis-cli”,而是要使用redis的“大量插入”功能。在这里我需要您的帮助:

我将如何仅在redis中做这样的事情?

SET counter 0
=> OK
INCR counter
=> (integer) 1
GET counter
=> "1"
SET KEY:{counter} "Content of line 1"
=> OK
INCR counter
=> (integer) 2
GET counter
=> "2"
SET KEY:{counter} "Different content of line 2"
=> OK

等等等

“获取计数器”行仅用于说明。

任何帮助表示赞赏。再次感谢 !

伯尼


问题答案:

为此使用列表。没有理由为每一行使用新的密钥。所有列表命令都在这里,但是您想要的是RPUSH。您可以在同一行中一次推送多个值,因此您只需执行以下操作:

RPUSH some_key line1 line2 ... lineN

然后检索:

LRANGE some_key 0 -1

快捷方便!



 类似资料:
  • 问题内容: 我正在考虑使用Redis的协议进行批量插入,如下所述:http : //redis.io/topics/mass-insert 在我忙于编写代码来处理此问题之前,我只是想确保自己清楚什么是Redis要求进行此工作。 上面的链接建议使用大容量插入调用SET操作[SET myKey Value myValue],我需要创建一个命令,该命令可以在文件的多行或单个引号字符串中完成。 假设我不想

  • 问题内容: 我正在尝试尽快将大量数据加载到Redis中。 我的数据如下所示: 左侧有一个〜12位数字,右侧有一个可变长度的字符串。键将是左侧的数字,数据将是右侧的字符串。 在我刚装箱的Redis实例中,并带有未压缩的纯文本文件(带有此数据),一分钟我可以得到大约一百万条记录。我需要做大约4,500万,这大约需要45分钟。45分钟太长。 我是否可以进行一些标准的性能调整来进行此类优化?通过在单独的实

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作

  • 问题内容: 我有一个应用程序,需要通过大量条目更新大量数据。基本上,它执行约7,000次插入和/或更新,但需要花费很长的时间(例如将近9分钟…平均每个查询约0.08秒)。从本质上讲,我正在寻求提高速度来处理多个此类请求(我不希望对我模糊的示例提出具体的答案……只是希望,可以帮助解释)。 以下是对请求进行概要分析的一些示例: 重复一遍恶作剧(大约7,000次)。这是一个更新,它收集在24小时内定期生

  • 就像有人说的第二种方式更慢,但我不确定,那么哪种方式更好呢?不能使数据库崩溃。

  • 问题内容: 我读到这里:使用Python将CSV文件导入sqlite3数据库表 似乎每个人都建议使用逐行读取,而不是使用SQLite的bulk .import。但是,如果您有数百万行的数据,这将使插入速度非常慢。还有其他方法可以避免这种情况吗? 更新:我尝试下面的代码逐行插入,但是速度不如我预期的那样。反正有改进的地方吗 问题答案: 使用生成器表达式将您的数据即时划分为多个块,在事务内进行插入。这