Index example

Because Redis is basically key/value store all kind of lookups it can do is primary key lookups.
However, programmers can build reverse indexes using sets.

Here we can show very simple example - employee database. For each employee, we will store:

We will like to be able to search by "gender" and "department". Code provided will have ability to add amployee, delete amployee and list employees

$r = new Redis();
$r->connect("", "6379");

function employee_add($fname, $lname, $gender, $dep, $salary=0){
	global $r;
	$gender = $gender == "M" ? "M" : "F";
		"M" :
		"S" :
		"D" :
			$dep = "";	// Unknown?
	// get next ID
	$id = $r->incr("all:empl");
	// insert data record
	$r->hmset("empl:$id", array(
		"fname"		=> $fname	,
		"lname"		=> $lname	,
		"gender"	=> $gender	,
		"dep"		=> $dep		,
		"salary"	=> $salary

	// build indexes
	$r->sadd("index:gender:$gender", $id);
	if ($dep)
	$r->sadd("index:dep:$dep", $id);

function employee_del($id){
	global $r;

	// get the data, in order to remove the index information
	$empl = $r->hgetall("empl:$id");
	//delete the index
	$r->srem("index:gender:{$empl["gender"]}", $id);

	if ($empl["dep"])
	$r->srem("index:dep:{$empl["dep"]}", $id);
	//delete the data

function employee_search($type, $data){
	global $r;

		"gender" :
		"dep" :
			$data = "dep";
	// get the members of the index
	foreach($r->smembers(index:$type:$data) as $id){
		echo "Employee No.$id\n";
		// get the data
		$empl = $r->hgetall("empl:$id");
		// for non PHP fans - this dumps the associative array
		echo "=====================\n\n";

employee_add("Peter", "Mikes",  "M", "M");
employee_add("John",  "Smith",  "M", "D");
employee_add("Matia", "Scott",  "F", "S");
employee_add("Anna",  "Jones",  "F", "S");

employee_search("gender", "F");

employee_search("dep",    "S");

Redis connection note

The example uses generic connection to the Redis server. To make the example work with our service you will need to use code similar to this one:

// change these parameter according to the information in your instance list
$host = '';
$port = 1234;
$password = 'somehashcode';
$db = 0;

$r = new Redis();
$r->connect($host, $port);

blog comments powered by Disqus

Code library

Because we want this page to be useful for memcached users, we tagged with memcached all examples that may be "recreated" for memcached server.

MySQL cache in PHP

How to use Redis for cache MySQL queries in a way similar to memcached
Date: 2011-07

Tags: memcached php cache mysql

How to prevent website to be web-scraped

How to use Redis to prevent web-scraping parsing and web-spam
Date: 2011-07

Tags: webstats memcached php security anti-spam

'Rotating' news

How to do 'Rotating' news list
Date: 2011-07

Tags: php

Show random element

How pool random element from news list
Date: 2011-07

Tags: php

Accounting / Vote example

How Redis can help us with Accounting / Vote / Like / Recommend / +1 clicks
Date: 2011-07

Tags: php mysql

Scoreboard example

How to implement fast hi-score table
Date: 2011-07

Tags: php

Scaling example

How to scale Redis on several servers using sharding
Date: 2011-07

Tags: cloud memcached php sharding scaling

Distributed work pool / pipeline example

How to implement distributed work pool and to scale some work across many computers
Date: 2011-07

Tags: cloud php scaling

Simple realtime web counter

How to collect and store information for page visitors
Date: 2011-07

Tags: php webstats

Emulation of expiration of the set members

How to make set members to expire
Date: 2011-07

Tags: php

Lock example

How Redis can help us with user level locks
Date: 2011-08-23

Tags: memcached php lock

Message queue example

Creating distributed message queue
Date: 2011-09-17

Tags: cloud php queue scaling

Index example

Building reverse index using sets
Date: 2011-11-01

Tags: php

Using Redis for MySQL autoincrement

Using Redis to speed up MySQL inserts
Date: 2011-01-13

Tags: cloud php scaling mysql

Using Redis as "data buffer"

Using Redis for caching MySQL or Cassandra data inserts
Date: 2012-08-04

Tags: webstats mysql cloud cassandra php sharding scaling

Calculating how many visitors are on the same webpage using rolling average

How to produce 'There are 123 visitors on this page' sign
Date: 2011-07

Tags: memcached php webstats

© Jul.2011 - 2017,