简介
我正在尝试做一些听起来很简单的事情,但到目前为止,我找不到答案。我在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中这样做的常用方法是什么?
提前致谢!
答案 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