当前位置: 首页 > redis > 正文

php中使用PhpRedis模块操作Redis的实例

Redis是一款开源的可基于内存亦可持久化的日志型、Key-Value数据库,是目前最快的NOSQL数据库之一,单从做缓存应用来讲比Memcache更加优秀。要操作Redis缓存,我们必须选择一种客户端。Redis官方已经列出了很多的PHP的客户端,这里推荐另外一个非常受欢迎的php客户端–phpredis。


下文中我们将使用phpredis来于redis进行交互,主要包含以下几点;
(一)配置phpredis
(二)使用phpredis
(三)phpredis中常用的方法
(四)php程序中使用redis的完整实例

(一)配置phpredis
首先从github上将phpredis下载下来,https://github.com/nicolasff/phpredis
下载之后解压,Ubuntu上可以使用如下命令安装:
cd phpredis
sudo phpize
sudo ./configure
sudo make
sudo make install

现在phpredis扩展已经打进来了,复制模块到php扩展目录

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

现在,修改php.ini,增加如下

extension = redis.so

或者如下操作:

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

(二)使用phpredis
phpredis扩展引入了Redis类,基于这个类我们可以进行各种操作了。
1.Redis类
通常用于连接redis,我们可以使用如下代码创建实例

$redisClient = new Redis();

2.RedisException类
这个类是用来进行异常捕获的,代码样例如下:

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

(三)常用的phpredis方法
1.Connect
用来连接redis实例

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

例如:

$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
根据key得到value

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

3.mget
根据key的队列获取多个value值

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

4.set
写入key-value对

$redisClient -> set('key');

5.setex
同样是写入key-value对,添加了过期时间

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

6.del
删除key

$redisClient -> del('key');

7.exists
判断key是否存在,如存在返回true

$redisClient -> exists('key');

8.close
关闭连接

$redisClient -> close();

(四)php使用redis的例子
通常redis作为数据库的cache而存在,这里我们可以看到redis是如何跟php+mysql整合的。

<?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 );

?>

简单描述一下上面的phpredis例子,我们执行了一个sql语句从mysql中取数据,查询结果返回一个array集合,然后encode mysql查询出来的array成一个json格式插入到redis中,最后从redis中取出来,并做展现。

本文固定链接: https://sudops.com/example-of-use-redis-with-phpredis.html | 运维速度

该日志由 u2 于2014年02月26日发表在 redis 分类下,
原创文章转载请注明: php中使用PhpRedis模块操作Redis的实例 | 运维速度
关键字: ,

报歉!评论已关闭.