php操作redis_PHP操作redis的两种方式
隨著redis使用越來越廣泛,各種應用系統幾乎都會嵌入redis。當然,PHP也不例外。在我接觸到的項目中,主要是使用redis作為緩存服務器。但是對于PHP來說,它本身并不支持redis。所以說這里我們需要自己做一些事情,是PHP可以連接redis并操作它。
這里主要有兩種方式:一種是通過第三方擴展,另一種是自己使用socket來封裝redis。
通過第三方擴展
目前,對于php操作redis的第三方擴展有很多,我們在這就拿phpredis為例來介紹。
當然,按照常規的PHP模塊來說,在安裝phpredis擴展之前,如果我們像其他的模塊一樣來實例化redis操作對象的話,系統會報找不到redis類的錯誤
$obj = new redis();
var_dump($obj);
?>
錯誤如下
Fatal_error: class redis not found……
從上面我們也可以看出php默認是不支持redis操作的。
那么我們接下來就需要自己動手了。
在linux系統下擴展
首先我們需要下載,當然在linux上下載第三方應用還是比較容易的。phpredis的源代碼托管在github上,下載地址:https://github.com/phpredis/phpredis.git
# git clone https://github.com/phpredis/phpredis.git
然后進入該目錄
#cd phpredis
對PHP擴展第三方應用,需要借助phpize這個工具,具體步驟如下
# /usr/local/php/bin/phpize? //生成編譯需要的文件
# ./configure
這個過程可能會出現如下錯誤
configure: error: Cannot find php-config. Please use --with-php-config=PATH
出現這個錯誤的時候,我們需要按照它的提示 使用 –with-php-config=PATH重新操作
#./configure –with-php-config=/usr/local/php/bin/php-config
//成功
# make && make install
Installing shared extensions:???? /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/?? //編譯安裝成功后的結果
最后的結果告訴我們,phpredis已經編譯成功。在/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/這個目錄下已經生成了redis.so庫。
然后我們編輯php.ini配置文件,將redis.so類庫加入到php.ini擴展中
extensions_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
extension=redis.so
然后我們重啟服務,這時phpredis已經擴展成功了。我們可以使用phpinfo()函數檢測當前PHP的環境信息。
發現當前php已經支持redis操作了。
其實在linux系統下面對PHP進行第三方的擴展很簡單。下面我們來看一下如何在windows下進行擴展。
在windows系統下擴展
1. 安裝visual studio 2008
2. 下載PHP源碼
3. 解壓到C:\php\php5
5. 打開 cmd 依次執行下面的命令
>cd C:\php\php-5.4.9\ext
>git clone https://github.com/nicolasff/phpredis.git
>cd ..
>buildconf.js
>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv" /x86 /xp /release
>path "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";%PATH%
>bin\phpsdk_setvars.bat
>"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
>configure.js --disable-all --enable-cli --enable-redis --enable-redis-session (if building the nts version, also add --disable-zts)
>nmake php_redis.dll
>fix any compilation errors
最后將生成的php_redis.dll 拷貝到 php安裝目錄\ext 目錄下面。然后編輯php.ini,添加如下內容
extension=php_redis.dll
最后重啟服務即可完成phpredis在windows下的擴展。
使用原生php封裝phpredis
上面我們介紹了使用第三方的擴展使php支持redis操作。除此之外我們還可以自己通過redis的協議使用php來封裝phpredis。
這里我先封裝一個類,簡單的實現get 命令。代碼如下
class Redis{
private $handle;
private $host;
private $port;
private $slient_fail;
private $timeout;
private $connect_timeout = 3;
public function __construct($host,$port,$slient_fail = false,$timeout = 60){
if($host && $port){
$this->connect($host,$port,$slient_fail,$timeout);
}
}
private function connect($host = '127.0.0.1',$port = 6379,$slient_fail = false,$timeout = 60){
$this->host = $host;
$this->port = $port;
$this->slient_fail = $slient_fail;
$this->timeout = $timeout;
$this->handle = fsockopen($host,$port,$errno,$errstr,$this->connect_timeout);
}
public function get(){
$nl = "\r\n";
$cmd = '*2'.$nl.'$3'.$nl.'get'.$nl.'$5'.$nl.'mykey'.$nl;
fwrite($this->handle, $cmd);
$res = fgetc($this->handle);
$res = trim(fgets($this->handle));
$response = fread($this->handle,$res);
fgets($this->handle);
echo $response;
}
}
$obj = new Redis('192.168.144.133',6379);
$obj->get();
在上面代碼中,有一個需要注意的地方。就是在成員函數get()中的變量$cmd的內容需要和大家簡單介紹一下。
$cmd = '*2'.$nl.'$3'.$nl.'get'.$nl.'$5'.$nl.'mykey'.$nl;
其中*后面的數字表示該命令的參數個數。因為有兩個參數 get 和 mykey,所以*后面是2。$后面的數字表示的是參數的長度。get長度是3,mykey長度是5。所以前面分別是 $3和$5。
希望本文對大家有所幫助。
總結
以上是生活随笔為你收集整理的php操作redis_PHP操作redis的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aix cpu java_AIX cpu
- 下一篇: php this 代表什么,php中$t