如何在redis中加入2个列表

时间:2013-10-01 18:41:55

标签: list redis

简介

我正在尝试做一些听起来很简单的事情,但到目前为止,我找不到答案。我在redis 2.6.4独立服务器(没有集群)中有2个列表:

list1 = [4, 5 ,6]

list2 = [1, 2, 3]

问题

我需要连接列表以生成这样的内容:

list3 = list1 + list2

list3 = [4, 5, 6, 1, 2, 3] <- I need to preserve order, list1 and then list 2

list4 = list2 + list1

list4 = [1, 2, 3, 4, 5, 6]

问题

由于redis使用链表来存储这个列表,我希望有一种直接的方式来实现这一点,这种方式是否存在?在redis中这样做的常用方法是什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

安全地执行此操作的最简单方法是使用LUA脚本,这样您就可以保证结果列表不会丢失任何元素(并且您可以轻松保留顺序)。

如果LUA不是一个选项,那么您需要执行此客户端并使用监视这些键进行更改(请参阅redis和WATCH命令中的事务)

答案 1 :(得分:0)

这是使用Lua的Redis命令:

eval "for i,l in ipairs(ARGV) do for i,v in ipairs(redis.call('lrange',l,0,-1)) do redis.call('rpush',KEYS[1],v) end end" 1 list3 list1 list2
  • 作为额外的奖励,您可以通过在末尾添加更多列表键来指定要附加到主列表中的任意数量的列表