在Redis列表中批量插入值

5
有没有一种方法可以同时将多个值存储在Redis列表中?我只能找到一次在列表中插入1个值的方法。
我一直在查看以下命令文档:http://redis.io/commands 更新:我已经为此功能创建了一个票据
4个回答

15

如果你在使用redis-py,你可以使用一个pipeline。你可以查看下面的内容,我在一个redis elasticache的aws实例上运行了这个pipeline,并发现以下结果:

import redis
rs = redis.StrictRedis(host='host', port=6379, db=0)
q='test_queue'

在0.17秒内完成了10,000个值的运算

def multi_push(q,vals):
    pipe = rs.pipeline()
    for val in vals:
        pipe.lpush(q,val)
    pipe.execute()

完成10,000个值的计算,耗时13.20秒。

def seq_push(q,vals):
    for val in vals:
        rs.lpush(q,val)

~ 速度提高了78倍。


这应该是被接受的答案,至少在2020年是相关的。 - Jason R Stevens CFA

2

是的,看起来这似乎不可能。您可以使用 MULTI(事务)将多个值存储在原子序列中。


1

关于列表,我不知道有没有这样的功能,但是根据你的数据量,将数据重新转换为使用Redis的多集合命令HMSET可能会更有效率,因为它确实可以在单个调用中进行多个插入操作:

HMSET V3620 UnixTime 1309312200 UID 64002 username "doug" level "noob"

正如您所期望的那样,HMSET创建了与V3620相关的Redis键。在HMSET命令后面跟随多个字段-值对:

HMSET key field 1 value 1 field 2 value 2

1

如果你运行的是2.4版本,那么是可以的。虽然它还没有被标记为稳定版,但据我所知,很快就会了。话虽如此,我正在使用主干版本,它对我来说非常稳定,处理了许多数据和高频率的变更。有关可变命令的更多详细信息,请参见2.4 and other news


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接