Redis / String Manipulation Commands

Before The Dive Redis Commands String Manipulation Commands Redis Hashes

Imagine we want to keep track of a certain product sales per hour, we could schedule a cron job that runs every hour and does the following:

set("product:1:sales:{$currentHour}", $sales)

And then to plot the results later we can use mget to retrieve the value of all these keys:

mget('product:1:sales:00', 'product:1:sales:01', ...)

And maybe at the beginning of the new day we reset all the keys:

del('product:1:sales:00', 'product:1:sales:01', ...)

Ok that might work, but let me show you another way to do it using Redis string manipulation commands:

append("product:1:sales", '00030')
expire("product:1:sales", 86400)

Here we'll append the 5-digit sales number every hour to a product:1:sales string key, the value of that key after a few hours may look like:

000300020000010

We also set they key to expire after 24 hours automatically using the expire command.

Now since we know that our sales value is always a 5-digit number, we can use the following Redis commands to gather some useful information:

// strlen returns the length of the string

$hoursElapsed = Redis::strlen("product:1:sales") / 5;

We can also get the sales in the first 2 hours of the day:

// getrange returns the portion of the string specified by the given offset start and end.
// and str_split will divide the string returned every five characters

$salesUntil2AM = str_split(
    Redis::getrange("product:1:sales", 0, (5 * 2) - 1),
    5
);

// The result will be ['00030', '00200']

Or the sales for the whole day:

$sales = str_split(
    Redis::get("product:1:sales"),
    5
);

We can also reset the sales at a given hour:

// Here we reset the sales of the second hour, so starting at offset 5 we'll
// overwrite the string for the length of the passed value.

Redis::setrange("product:1:sales", 5, '00300');
Continue to "Redis Hashes"

I'm Mohamed Said, a web developer from Hurghada-Egypt. I work with the laravel core team trying to deliver the best developer experience.
Find me as @themsaid


Subscribe to mailing list