4

介绍

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

提前致谢!

4

2 回答 2

1

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

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

于 2013-10-03T13:08:34.993 回答
1

这是使用 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
  • 作为额外的奖励,您可以通过在末尾添加更多列表键来指定要附加到主列表中的任意数量的列表
于 2018-05-25T11:57:55.450 回答