Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Node & Redis queue

Node & Redis queue

Problem

I am trying to create a Queue of JSON objects using Redis.

I currently use ZADD to create an ordered set:

var entry = {"name": "Hank", "question": "Where am I?"};
client.zadd("entries", 1, JSON.stringify(entry));

How can I increment the score each time there is a new entry?

Problem courtesy of: user2871322

Solution

If you are trying to create a queue, where new items are added to the top of the queue, then you probably don't want a Sorted Set at all.

Sorted Sets are really useful where you have a list of things that have different scores, like the leaderboard for a video game, or a ranking of best places to live. If you are asking how to increase the score of an existing entry, that is easy, you just add it again with the new score. So, client.zadd("entries", 2, JSON.stringify(entry)); would update the score to 2. From redis.io:

Adds all the specified members with the specified scores to the sorted set stored at key. If a specified member is already a member of the sorted set, the score is updated and the element reinserted at the right position to ensure the correct ordering.

It sounds though like you are asking how to increase the score of all existing items when you add a new item to the set. This would be like "pushing" each of those existing items down one spot and putting the new one at the top. This is not what sorted sets are for and are exactly what redis lists are for. And, pushing is exactly what you would do. Use LPUSH to prepend elements on a list.

Solution courtesy of: Carl Zulauf

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

Node & Redis queue

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×