1. 程式人生 > 程式設計 >php操作redis資料庫常見方法例項總結

php操作redis資料庫常見方法例項總結

本文例項講述了php操作redis資料庫常見方法。分享給大家供大家參考,具體如下:

一、安裝php_redis擴充套件,用以操作redis

http://pecl.php.net/package/redis

選擇自已係統php版本對應的擴充套件。

二、redis連線與驗證

<?php
//建立一個redis客戶端
$redis = new Redis();
//連線redis服務,指定主機,埠,和超時時間
$redis->connect('127.0.0.1',6379,60);
//進行密碼驗證
$redis->auth('');

三、redis的字串(string)操作

//設定鍵的值,成功返回true,失敗返回false
$ret = $redis->set('app_id','1234567890');
var_dump($ret);
//獲取鍵的值,成功返回鍵值,失敗返回false
$ret = $redis->get('app_id');
var_dump($ret);
//設定鍵的值從指定偏移量開始,替換成指定字串,成功返回新字串的長度
$ret = $redis->setRange('app_id',2,'666');
var_dump($ret);
//獲取鍵的值,通過開始索引和結束索引,獲取的子符串包括開始索引和結束索引
$ret = $redis->getRange('app_id',-1);
var_dump($ret);
$ret = $redis->getRange('app_id',3,6);
var_dump($ret);
//設定新值,返回舊值,如果key不存在,則設定值,返回false
$ret = $redis->getSet('app_id','666666666');
var_dump($ret);
//一次設定多個鍵值對
$ret = $redis->mset(['db_name' => 'test','db_host' => 'localhost']);
var_dump($ret);
//一次獲取多個鍵值對,返回一個數組
$ret = $redis->mget(['db_name','db_host']);
var_dump($ret);
//設定鍵值,和過期時間,單位:秒,成功返回true
$ret = $redis->setex('name',10,'hello');
var_dump($ret);
//設定鍵值,過期時間以毫秒為單位
$ret = $redis->psetex('age','28');
var_dump($ret);
//key不存在時,才設定值,key不存在且設定成功返回true,否則返回false
$ret = $redis->setnx('name','test');
var_dump($ret);
//setnx的批量操作,只有在所有key都不存在時才能設定成功,否則,有一個key存在,所有key都無法設定成功
$ret = $redis->msetnx(['name' => 'hello','age' => '28','sex' => '男']);
var_dump($ret);
//獲取鍵值的字串長度,如果key不存在,返回0,如果值不為字串返回false
$ret = $redis->strlen('name');
var_dump($ret);
//將key中儲存的數字值加1,如果key不存在先初始為0再加1,如果儲存的不是數字值,則返回false,成功返回新增值
$ret = $redis->incr('age');
var_dump($ret);
//將key中儲存的數字值加指定增量值
$ret = $redis->incrBy('age',10);
var_dump($ret);
//將key中儲存的數字值加指定浮點增量值
$ret = $redis->incrByFloat('age',0.25);
var_dump($ret);
//將key中儲存的數字值減1
$ret = $redis->decr('age');
var_dump($ret);
//將key中儲存的數字值減指定減量值
$ret = $redis->decrBy('age',10);
var_dump($ret);
//給指定key的值,追加值到原值末尾,如果key不存在,則相當於set()函式
$ret = $redis->append('name','hahaha');
var_dump($ret);

四、redis的雜湊(hash)操作

//設定hash表中的鍵值,成功返回1,失敗返回0
$ret = $redis->hSet('user','name','xiaoxu');
var_dump($ret);
//獲取hash表中鍵的值,如果hash表中不存在,則返回false
$ret = $redis->hget('user','name');
var_dump($ret);
//判斷hash表中欄位是否存在,存在返回true,失敗返回false
$ret = $redis->hExists('user','name');
var_dump($ret);
//刪除hash表中的欄位,成功返回1,失敗返回0
$ret = $redis->hDel('user','name');
var_dump($ret);
//批量設定hash表中欄位的值,成功返回true
$ret = $redis->hMSet('user',['name' => 'xiaoxu','age' => 28,'sex' => '男']);
var_dump($ret);
//批量獲取hash表中欄位的值
$ret = $redis->hMGet('user',['name','age','sex']);
var_dump($ret);
//獲取hash表中所有欄位和值
$ret = $redis->hGetAll('user');
var_dump($ret);
//獲取hash表中所有欄位名,hash不存在時返回空陣列
$ret = $redis->hKeys('user');
var_dump($ret);
//獲取hash表中所有欄位值
$ret = $redis->hVals('user');
var_dump($ret);
//當hash表中欄位不存在時,設定值。如果hash表不存在先建立,若欄位存在,不作任何操作。
//設定成功返回true,否則返回false
$ret = $redis->hSetNx('user','height',172);
var_dump($ret);
//獲取hash表的欄位數量,hash不存在返回0
$ret = $redis->hlen('user');
var_dump($ret);
//為hash表中欄位值增加指定增量值,如果增量值為負數,則相當於減法操作
//hash表不存在則先建立,欄位不存在則初始為0,若欄位值為字串,則返回false
$ret = $redis->hIncrBy('user',10);
var_dump($ret);
//為hash表中欄位值增加指定浮點增量值
$ret = $redis->hIncrByFloat('user',0.25);
var_dump($ret);

五、redis的列表(list)操作

//從列表頭部插入一個值
$ret = $redis->lpush('students','xiaoxu');
$ret = $redis->lpush('students','xiaoxu2');
var_dump($ret);
//從列表尾部插入一個值
$ret = $redis->rpush('students','xiaowang');
$ret = $redis->rpush('students','xiaowang2');
var_dump($ret);
//獲取列表指定範圍內的元素,0表示第一個元素,-1表示最後一個元素
$ret = $redis->lRange('students',-1);
var_dump($ret);
//將一個值插入到已存在的列表頭部,列表不存在時操作無效。
$ret = $redis->lPushx('students','xiaozhang');
var_dump($ret);
//將一個值插入到已存在的列表尾部,列表不存在時操作無效。
$ret = $redis->rPushx('students','xiaoli');
var_dump($ret);
//移出並獲取列表的第一個元素,若key不存在或不是列表則返回false。
$ret = $redis->lpop('students');
var_dump($ret);
//移出並獲取列表的最後一個元素,若key不存在或不是列表則返回false。
$ret = $redis->rpop('students');
var_dump($ret);
//移出並獲取列表的第一個元素,如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
//超時時間單位:秒
$ret = $redis->blPop('students',10);
var_dump($ret);
//移出並獲取列表的最後一個元素,如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
$ret = $redis->brPop('students',10);
var_dump($ret);
//移除列表中最後一個元素,將其插入另一個列表頭部,並返回這個元素。若源列表沒有元素則返回false。
$ret = $redis->rpoplpush('students','students2');
var_dump($ret);
//移除列表中最後一個元素,將其插入另一個列表頭部,並返回這個元素。
//如果列表沒有元素則會阻塞列表直到等待超時或發現可彈出元素為止。
//超時時間單位:秒
$ret = $redis->brpoplpush('students','students2',10);
var_dump($ret);
//獲取列表的長度
$ret = $redis->lLen('students2');
var_dump($ret);
//通過索引獲取列表中的元素。若索引超出列表範圍則返回false。
$ret = $redis->lIndex('students2',0);
var_dump($ret);
//通過索引設定列表中元素的值。若是索引超出範圍,或對一個空列表進行lset操作,則返回false。
$ret = $redis->lSet('students2','xiaomi');
var_dump($ret);
//在列表中指定元素前或後面插入元素。若指定元素不在列表中,或列表不存在時,不執行任何操作。
//引數:列表的key,Redis::AFTER或Redis::BEFORE,基準元素,插入元素
//返回值:插入成功返回插入後列表元素個數,若基準元素不存在返回-1,若key不存在返回0,若key不是列表返回false。
$ret = $redis->lInsert('students2',Redis::AFTER,'xiaomi','xiaoji');
var_dump($ret);
//根據第三個引數count的值,移除列表中與引數value相等的元素。
//count > 0 : 從表頭開始向表尾搜尋,移除與value相等的元素,數量為count。
//count < 0 : 從表尾開始向表頭搜尋,移除與value相等的元素,數量為count的絕對值。
//count = 0 : 移除表中所有與value相等的值。
//返回實際刪除元素個數
$ret = $redis->lrem('students2',0);
var_dump($ret);
//對列表進行修剪,只保留指定區間的元素,其他元素都刪除。成功返回true。
$ret = $redis->ltrim('students2',-1);
var_dump($ret);

六、redis的集合(set)操作

//向集合新增一個或多個成員
//若集合不存在則先建立,若key不是集合型別則返回false
//若元素已存在返回0,插入成功返回1。
$ret = $redis->sAdd('friend','xiaoxu','xiaowang','xiaoli','xiaozhang');
var_dump($ret);
//返回集合中所有成員。
$ret = $redis->sMembers('friend');
var_dump($ret);
//判斷元素是否是集合key的成員
$ret = $redis->sIsMember('friend','xiaoxu');
var_dump($ret);
//返回集合中成員的數量。
$ret = $redis->scard('friend');
var_dump($ret);
//移除並返回集合中的一個隨機元素
$ret = $redis->spop('friend');
var_dump($ret);
//返回集合中的一個或多個隨機成員元素,返回元素的數量和情況由函式的第二個引數count決定:
//如果count為正數,且小於集合基數,那麼命令返回一個包含count個元素的陣列,陣列中的元素各不相同。
//如果count大於等於集合基數,那麼返回整個集合。
//如果count為負數,那麼命令返回一個數組,陣列中的元素可能會重複出現多次,而陣列的長度為count的絕對值。
$ret = $redis->sRandMember('friend',2);
var_dump($ret);
//移除集合中指定的一個元素,忽略不存在的元素。刪除成功返回1,否則返回0。
$ret = $redis->sRem('friend','xiaowang');
var_dump($ret);
//迭代集合中的元素
//引數:集合的key,迭代器變數,匹配模式,每次返回元素數量(預設為10個)
$ret = $redis->sScan('friend',$iter,'xiao*',5);
var_dump($ret);
var_dump($iter);
//將指定成員從一個源集合移動到一個目的集合。
//若源集合不存在或不包含指定元素則不做任何操作,返回false。
//引數:源集合,目標集合,移動元素
$ret = $redis->sMove('friend','friend2','xiaoxu');
var_dump($ret);
//返回所有給定集合之間的差集,不存在的集合視為空集。
$ret = $redis->sDiff('friend','friend2');
var_dump($ret);
//將所有給定集合之間的差集儲存在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回差集元素個數。
//引數:第一個引數為目標集合,儲存差集。
$ret = $redis->sDiffStore('friend3','friend');
var_dump($ret);
//返回所有給定集合的交集,不存在的集合視為空集。
$ret = $redis->sInter('friend','friend2');
var_dump($ret);
//將所有給定集合的交集儲存在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回交集元素個數。
//引數:第一個引數為目標集合,儲存交集。
$ret = $redis->sInterStore('friend4','friend');
var_dump($ret);
//返回所有給定集合的並集,不存在的集合視為空集。
$ret = $redis->sUnion('friend','friend2');
var_dump($ret);
//將所有給定集合的並集儲存在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回並集元素個數。
//引數:第一個引數為目標集合,儲存並集。
$ret = $redis->sUnionStore('friend5','friend');
var_dump($ret);

七、redis的有序集合(sorted set)操作

//將一個或多個成員元素及其分數值加入到有序集當中。
//如果某個成員已經是有序集的成員,則更新這個成員的分數值,並通過重新插入這個成員元素,來保證該成員在正確的位置上。
//分數值可以是整數值或雙精度浮點數。
$ret = $redis->zadd('scores',60,'math',80,'english',75,'chinese');
var_dump($ret);
//返回有序集中指定區間內的成員。成員按分數從小到大排序,分數值相同的則按字典序來排序。
//引數:第四個引數表示是否返回各個元素的分數值,預設為false。
$ret = $redis->zRange('scores',-1,true);
var_dump($ret);
//返回有序集中指定區間內的成員。成員按分數值從大到小排序,分數值相同的則按字典序的逆序來排序。
$ret = $redis->zRevRange('scores',true);
var_dump($ret);
//返回有序集中指定分數區間的成員列表,按分數值從小到大排序,
//分數值相同的則按字典序來排序。預設使用閉區間。
$ret = $redis->zRangeByScore('scores',90,['withscores' => true]);
var_dump($ret);
//返回有序集中指定分數區間的成員列表,按分數值遞減排序,
//分數值相同的則按字典序的逆序來排序。
//注意,區間表示的時候大值在前,小值在後,預設使用閉區間。
$ret = $redis->zRevRangeByScore('scores',['withscores' => true]);
var_dump($ret);
//迭代有序集合中的元素。
//返回值:[元素名 => 分數值,...]
$ret = $redis->zScan('scores','*',10);
var_dump($ret);
var_dump($iter);
//返回指定有序集的元素數量。
$ret = $redis->zCard('scores');
var_dump($ret);
//返回有序集中指定分數區間的成員數量。
$ret = $redis->zCount('scores',90);
var_dump($ret);
//返回有序集中指定成員的分數值。若成員不存在則返回false。
$ret = $redis->zScore('scores','english');
var_dump($ret);
//返回有序集中指定成員的排名,按分數值從小到大排序。分數值最小者排名為0。
$ret = $redis->zRank('scores','english');
var_dump($ret);
//返回有序集中指定成員的排名,按分數值從大到小排序。分數值最大者排名為0。
$ret = $redis->zRevRank('scores','english');
var_dump($ret);
//移除有序集中的一個或多個成員,忽略不存在的成員。返回刪除的元素個數。
$ret = $redis->zRem('scores','english');
var_dump($ret);
//移除有序集中指定排名區間的所有成員。
$ret = $redis->zRemRangeByRank('scores',2);
var_dump($ret);
//移除有序集中指定分數值區間的所有成員。
$ret = $redis->zRemRangeByScore('scores',90);
var_dump($ret);
//對有序集中指定成員的分數值增加指定增量值。
//若為負數則做減法,若有序集不存在則先建立,若有序集中沒有對應成員則先新增,最後再操作。
$ret = $redis->zIncrBy('scores','chinese');
var_dump($ret);
//計算給定一個或多個有序集的交集,並將其儲存到一個目的有序集中。
//引數:目的有序集合,多個有序集合,多個有序集合的權重,合併有序集合的方式(成員的分數值與權重相乘後的是相加或是比較大小)
$redis->zAdd('s1',1,'111');
$redis->zAdd('s1','222');
$redis->zAdd('s1','333');
$redis->zAdd('s2',4,'222');
$redis->zAdd('s2',5,'333');
$ret = $redis->zInter('s3',['s1','s2'],[1,5],'SUM');
// ['222' => 22,'333' => 28]
var_dump($ret);
$ret = $redis->zInter('s4','MIN');
// ['222' => 2,'333' => 3]
var_dump($ret);
$ret = $redis->zInter('s5','MAX');
// ['222' => 20,'333' => 25]
var_dump($ret);
//計算給定一個或多個有序集的並集,並將其儲存到一個目的有序集中。
//結果集中某個成員的分數值是所有給定集下該成員分數值之和。
$ret = $redis->zUnion('s6',[5,1],'SUM');
// ['111' => 5,'222' => 14,'333' => 20]
var_dump($ret);
$ret = $redis->zUnion('s7','MIN');
// ['222' => 4,'111' => 5,'333' => 5]
var_dump($ret);
$ret = $redis->zUnion('s8','MAX');
// ['111' => 5,'222' => 10,'333' => 15]
var_dump($ret);

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php+redis資料庫程式設計技巧總結》、《php面向物件程式設計入門教程》、《PHP基本語法入門教程》、《PHP陣列(Array)操作技巧大全》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。