这是我在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 批量插入?”
如何使用 Redis 批量插入?
我在谷歌上搜索并阅读了很多对 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 的“mass insert”功能。在这里我需要你的帮助:
我将如何仅在 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”行仅用于说明。
任何帮助表示赞赏。再次感谢 !
伯尼