Sergio Ayestarán
Sergio Ayestarán

Reputation: 5920

How to join 2 lists in redis

Intro

I'm trying to do something that sounds simple, but so far I'm not having luck finding the answer. I have 2 lists in a redis 2.6.4 standalone server(no cluster):

list1 = [4, 5 ,6]

list2 = [1, 2, 3]

The problem

And I need to concatenate the lists to produce something like this:

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]

The question

Since redis use linked lists to store this lists I was expecting to have a straightforward way of doing this, does such a way exists? what's the usual way of doing this in redis?

Thanks in advance!

Upvotes: 5

Views: 3393

Answers (2)

Zectbumo
Zectbumo

Reputation: 4481

Here is the Redis command using Lua:

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
  • As an added bonus you can specify any number of lists to append into your master list by simply adding more list keys at the end

Upvotes: 1

Tommaso Barbugli
Tommaso Barbugli

Reputation: 12031

The easiest way to do this safely is to use LUA scripting, this way you have the guarantee that the resulting list is not missing any element (and you can easily preserve the order).

If LUA is not an option then you need to do this client side and use watch those keys for changes (see transaction in redis and WATCH command)

Upvotes: 1

Related Questions