Introduction to Redis Lists

Introduction to Redis Lists

Welcome back! In the previous lessons, we delved into connecting to Redis and performing operations with numbers. Now, let's explore another essential Redis data structure: lists. Lists in Redis are an excellent way to store ordered collections of items, such as names, messages, or even tasks.

What You'll Learn

By the end of this lesson, you'll know how to:

  1. Use the rPush command to add items to a Redis list.
  2. Retrieve list items using the lRange command.

Here's a quick look at how you'll be working with lists in Redis:

import { createClient } from 'redis';

// Connect to Redis
const client = createClient();

client.on('error', err => console.error('Redis Client Error', err));

await client.connect();

// Working with Redis lists
for (const student of ['Alice', 'Bob', 'Charlie']) {
  await client.rPush('students', student);
}

const students = await client.lRange('students', 0, -1);
console.log('Students in the list:', students);

// Close the connection
await client.disconnect();

Let's break down the commands used in the example above:

  • The rPush command adds the names Alice, Bob, and Charlie to the list named students. The first argument is the list name, followed by the item to add. Note, that the rPush command adds items to the end of the list, so the elements will be in the order they were added.
    • Note that since Redis is a key-value store, if you run the same code multiple times, the list will keep growing with the same elements, as lists in Redis allow duplicates.
  • The lRange command retrieves all elements in the students list, and we print them out.
    • The lRange command takes the list name, a starting index, and an ending index as arguments. Here, we use 0 to indicate the first element and -1 to indicate the last element.

Here are few more commands you'll use to work with Redis lists:

import { createClient } from 'redis';

// Connect to Redis
const client = createClient();

client.on('error', err => console.error('Redis Client Error', err));

await client.connect();

await client.lPush('students', 'David'); // Add 'David' to the beginning of the list
await client.lPush('students', 'Eve'); // Add 'Eve' to the beginning of the list
await client.lPush('students', 'David'); // Add 'David' to the beginning of the list
await client.lPush('students', 'Mary'); // Add 'Mary' to the beginning of the list, the list is now ['Mary', 'David', 'Eve', 'David']

const secondStudent = await client.lIndex('students', 1); // Retrieve the second student - Redis uses 0-based indexing
console.log('Second student:', secondStudent); // Output: 'David'

await client.lRem('students', 2, 'David'); // Remove 2 occurrences of 'David' from the list moving from the left
console.log(await client.lRange('students', 0, -1)); // Output: ['Mary', 'Eve']

// Close the connection
await client.disconnect();

Let's break down the commands used in the example above:

  • The lPush command adds items to the beginning of the list. After executing the commands, the list will be ['Mary', 'David', 'Eve', 'David'] - note that lists in Redis allow duplicates.
  • The lIndex command retrieves the item at the specified index. Here, we retrieve the second student - which is at index 1 - and print it out.
  • The lRem command removes a specified number of occurrences of an item from the list. In this case, we remove 2 occurrences of 'David' from the list. The list will now be ['Mary', 'Eve'].
Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal