redis - 质量插入和计数器

时间:2013-08-20 21:27:50

标签: redis

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

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

redis-server --version

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

redis-cli --version

=> redis-cli 2.6.14

我读过“如何使用Redis大量插入?” How to use Redis mass insertion?
我用谷歌搜索并阅读了redis INCR功能的许多赞誉。但是我并不是真的了解所有内容,而且我只能在内部执行此操作。

我的目标: 我想将'n'行文本导入redis,然后按照这个顺序将它们翻译。

对于每一行,我设置了一个唯一的键,如键:1,键:2,键: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

等等。

“GET counter”行只是为了说明。

感谢任何帮助。再次感谢!

伯尼

1 个答案:

答案 0 :(得分:2)

使用此列表。没有理由为每一行使用新密钥。所有列表命令都是here,但您想要的是RPUSH。你可以在同一行中同时推送多个值,所以你只需这样做:

RPUSH some_key line1 line2 ... lineN

然后检索:

LRANGE some_key 0 -1

快捷方便!