1. 程式人生 > >封裝php redis緩存操作類

封裝php redis緩存操作類

exist flushall func 數據讀取 loaded bin ret hand mys

封裝php redis緩存操作類,集成了連接redis並判斷連接是否成功,redis數據庫選擇,檢測redis鍵是否存在,獲取,寫入值,設置生存時間刪除清空操作。

php redis類代碼:

<?php
/**
* redisdrive.class.php
* php redis 操作類
**/
class redisdrive{
//鍵名
public $key;
//值
public $value;
//默認生存時間
public $expire = 86400; /*60*60*24*/
//連接是否成功
public $redis;
//連接redis服務器ip
public $ip = ‘127.0.0.1‘;
//端口
public $port = 6379;
//密碼
private $password = null;
//數據庫
public $dbindex = 0;

/**
* 自動連接到redis緩存
*/
public function __construct(){
//判斷php是否支持redis擴展
if(extension_loaded(‘redis‘)){
//實例化redis
if($this->redis = new redis()){
//ping連接
if(!$this->ping()){
$this->redis = false;
}else{
//連接通後的數據庫選擇和密碼驗證操作
$this->redis -> select($this->dbindex);
$this->redis->auth($this->password);
}
}else{
$this->redis = false;
}
}else{
$this->redis = false;
}
}

/**
* ping redis 的連通性
*/
public function ping(){
if($this->redis->connect($this->ip,$this->port)){
return true;
}else{
return false;
}
}

/**
* 檢測redis鍵是否存在
*/
public function exists(){
if($this->redis->exists($this->key)){
return true;
}else{
return false;
}
}

/**
* 獲取redis鍵的值
*/
public function get(){
if($this->exists()){
return json_decode($this->redis->get($this->key),true);
}else{
return false;
}
}

/**
* 帶生存時間寫入key
*/
public function setex(){
return $this->redis->setex($this->key,$this->expire,json_encode($this->value));
}

/**
* 設置redis鍵值
*/
public function set(){
if($this->redis->set($this->key,json_encode($this->value))){
return $this->redis->expire($this->key,$this->expire);
}else{
return false;
}
}

/**
* 獲取key生存時間
*/
public function ttl(){
return $this->redis->ttl($this->key);
}

/**
*刪除key
*/
public function del(){
return $this->redis->del($this->key);
}

/**
* 清空所有數據
*/
public function flushall(){
return $this->redis->flushall();
}

/**
* 獲取所有key
*/
public function keys(){
return $this->redis->keys(‘*‘);
}

}

實例化調用:

判斷redis是否可用和當設置了redis session 時redis不可用轉回session文件操作。當redis可用時獲取指定的鍵值如果存在就從redis中獲取數據,如果不能存在就重新從數據庫獲取數據再寫入redis,redis不可用時直接從數據庫獲取操作。


//實例化
$redis = new redisdrive();
$redis = false;
//是否可用判斷
if($redis->redis==false){
$redis = false;
//如果把session存入了redis則在redis不可用時把session切換回文件存儲


ini_set(‘session.save_handler‘,‘files‘);
ini_set(‘session.save_path‘,‘/tmp‘);
}else{
$redis = true;
}

//redis判斷和數據讀取緩存操作設置
if($redis){
//設置redis鍵
$redis->key = ‘res‘;
//獲取redis鍵的值
$res_mysql = $redis->get();
//如果沒獲取到redis鍵的值得數據則從數據庫獲取並寫入緩存
if(!$res){
//設置生存時間
$redis->expire = 60*60*6;

//設置鍵
$redis->key = ‘res‘;

//數據庫獲取數據$res

//獲取到數據$res,賦值
$redis->value = $res;
//寫入到redis中
$redis->set();
}
}else{
//數據庫獲取數據
}

封裝php redis緩存操作類