How to Use Redis with PHP using PhpRedis with Examples

by Luke P. Issac on February 16, 2014

Redis is an open source, in-memory advanced key-value store. It is one of the fastest NoSQL database. Moreover, Redis cache store is a more advanced data-structure than memcached service.

For using Redis cache, we will have to pick a client. There are many PHP clients listed on its official website out of which phpredis is widely popular.

In this tutorial, we’ll use the API provided by “phpredis” extension to communicate with redis. This article covers the following:

  1. Configuring phpredis
  2. Using phpredis
  3. Frequently used PhpRedis Methods
  4. Example PHP Program using Redis

I. Configuring phpredis

First, download “phpredis” for github repository herehttps://github.com/nicolasff/phpredis

Once you’ve downloaded it, extract the files to phpredis directory. On ubuntu, install this extension as shown below.

cd phpredis

sudo phpize

sudo ./configure

sudo make

sudo make install

Now we have the phpredis extension installed. Copy and paste the content of “modules” folder to the php extension directory or use the following command in terminal.

sudo cp modules/redis.so {php-config–extension-dir}

Now, we need to configure php to use it. Add the following lines in php.ini for your php installation.

extension = redis.so

Or, we can also copy paste the redis.ini from ‘rpm’ folder to “php5/conf.d” folder to have a separate .ini file for redis.

Or, we can just create a redis.ini file there using following command:

sudo echo “extension=redis.so”  > /etc/php5/conf.d/redis.ini

II. Using phpredis

Phpredis extension imports the class Redis, which we can use to do various operations. The following are the classes which we can use:

1. Class Redis

This class is used to connect to redis instance. This class have all the methods which we need to interact with the redis.

We can create an instance of this following the syntax as follows:

$redisClient = new Redis();

2. Class RedisException

This class is used to monitor the issues like overloading and connection problems, as it throws an RedisException object to flag it. Internally this RedisException class in inherit the php “Exception” class.

You can use it following the sytax below:

try{
  if( $socket = fsockopen( $host, $port, $errorNo, $errorStr )){
  	if( $errorNo ){
  	  throw new RedisException(“Socket cannot be opened”);
  	}	
  }
}catch( Exception $e ){
  echo $e -> getMessage( );
}

III. Frequently used PhpRedis Methods

1. Connect

This method is used to connect with the runnig redis instance.

We can use it following the sytax below:

$redisClient -> connect(“hostOrUnixPath”, “port”, “timeOut”, “reservedInterval” );

For Example:

  • $objRedis = new Redis();
  • $objRedis->connect( ‘localhost’, 6379 );
  • $objRedis->connect( ’127.0.0.1′ ); // By default it will take port 6379
  • $objRedis->connect( ’127.0.0.1′, 6379, 3.5 ); // Giving timeOut of 3.5 sec
  • $objRedis->connect( ‘/var/temp/redis/redis.sock’ ); // Unix domain socket path
  • $objRedis->connect( ’127.0.0.1′, 6379, 2.5, NULL, 150 ); // Delay of 150 ms in-between reconnection attempts with a time out of 2.5 sec

2. get

This is used to get the value associated with the specified key as shown below:

$redisClient -> get('key', 'value');

3. mget

To get the multiple value associated with the array of keys as shown below:

$arrKeys = array(“keyA”, “keyB”, “keyC”);
$redisClient -> mget($arrKeys);

4. set

This is used to set the key-value pair as shown below:

$redisClient -> set('key');

5. setex

This is used to set the key-value pair with time in seconds after which it should expire as shown below:

$redisClient -> setex('key', 3600, 'value' );

6. del

This is used to delete the key specified as shown below:

$redisClient -> del('key');

7. exists

This returns true if specified key exists else returns false as shown below:

$redisClient -> exists('key');

8. close

This is used to close the connection created as shown below:

$redisClient -> close();

IV. Example PHP Program using Redis

Generally redis is used as cache with some database server. We will see now, how we can use above methods to implement it as cache when stacked with PHP and MySql. Below is the working example of how to implement it.

<?php 
  /* Functions for redis operations starts here   */ 

  $redisObj = new Redis(); 

  function openRedisConnection( $hostName, $port){ 
  	global $redisObj; 
	// Opening a redis connection
  	$redisObj->connect( $hostName, $port );
  	return $redisObj; 
  } 

  function setValueWithTtl( $key, $value, $ttl ){ 

  	try{ 
  		global $redisObj; 
		// setting the value in redis
  		$redisObj->setex( $key, $ttl, $value );
  	}catch( Exception $e ){ 
  		echo $e->getMessage(); 
  	} 
  } 

  function getValueFromKey( $key ){ 
  	try{ 
  		global $redisObj; 
		// getting the value from redis
  		return $redisObj->get( $key);
  	}catch( Exception $e ){ 
  		echo $e->getMessage(); 
  	} 
  } 

  function deleteValueFromKey( $key ){ 
  	try{ 
  		global $redisObj; 
		// deleting the value from redis
  		$redisObj->del( $key);
  	}catch( Exception $e ){ 
  		echo $e->getMessage(); 
  	} 
  } 

   /* Functions for converting sql result  object to array goes below  */ 

  function convertToArray( $result ){ 
  	$resultArray = array(); 

  	for( $count=0; $row = $result->fetch_assoc(); $count++ ) { 
  		$resultArray[$count] = $row; 
  	} 

  	return $resultArray; 
  } 

   /* Functions for executing the mySql query goes below   */ 

  function executeQuery( $query ){ 
     $mysqli = new mysqli( 'localhost',  'username',  'password',  'someDatabase' ); 

     if( $mysqli->connect_errno ){ 
       echo "Failed to connect to MySql:"."(".mysqli_connect_error().")".mysqli_connect_errno(); 
     } 

     $result =  $mysqli->query( $query ); 
	 // Calling function to convert result  to array
     $arrResult = convertToArray( $result );

     return $arrResult;   	 
  }  

  $query = 'select * from sometable limit 1'; 
  // Calling function to execute sql query
  $arrValues = executeQuery( $query );

  // Making json string
  $jsonValue = json_encode($arrValues);

  // Opening a redis connection
  openRedisConnection( 'localhost', 6379 );

  // Inserting the value with ttl =  1 hours
  setValueWithTtl( 'somekey1', $jsonValue, 3600);

  // Fetching value from redis using the key. 
  $val = getValueFromKey( 'somekey1' ); 

  //  Output:  the json encoded array from redis 
  echo $val;

  // Unsetting value from redis
  deleteValueFromKey( $key );

?>

In the above example PHP redis script, we are creating functions for various redis operations as explained in the comment inside the code. The script is well commented so that it is self explanatory. The flow of the script is as follows:

  1. In the above example, we execute a mysql query using the function executeQuery and then we are passing the value to function convertToArray() from where we will get the results as array.
  2. Next, we encode the array of results to json string and inserting it to redis.
  3. Finally, retrieve the string from the redis and display it.

Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 3 comments… read them below or add one }

1 frank February 17, 2014 at 8:31 pm

Good job.
Thank you so much.

2 Duane February 26, 2014 at 9:12 pm

The example works great. Thanks!

3 Jai Prakash July 15, 2014 at 12:28 am

Another way to install redis module is just to say on mac or linux distros by

pecl install redis

Leave a Comment

Previous post:

Next post: