本文實(shí)例講述了php操作redis數(shù)據(jù)庫(kù)常見(jiàn)方法。分享給大家供大家參考,具體如下:
一、安裝php_redis擴(kuò)展,用以操作redis
http://pecl.php.net/package/redis
選擇自已系統(tǒng)php版本對(duì)應(yīng)的擴(kuò)展。
二、redis連接與驗(yàn)證
?php
//創(chuàng)建一個(gè)redis客戶(hù)端
$redis = new Redis();
//連接redis服務(wù),指定主機(jī),端口,和超時(shí)時(shí)間
$redis->connect('127.0.0.1', 6379, 60);
//進(jìn)行密碼驗(yàn)證
$redis->auth('');
三、redis的字符串(string)操作
//設(shè)置鍵的值,成功返回true,失敗返回false
$ret = $redis->set('app_id', '1234567890');
var_dump($ret);
//獲取鍵的值,成功返回鍵值,失敗返回false
$ret = $redis->get('app_id');
var_dump($ret);
//設(shè)置鍵的值從指定偏移量開(kāi)始,替換成指定字符串,成功返回新字符串的長(zhǎng)度
$ret = $redis->setRange('app_id', 2, '666');
var_dump($ret);
//獲取鍵的值,通過(guò)開(kāi)始索引和結(jié)束索引,獲取的子符串包括開(kāi)始索引和結(jié)束索引
$ret = $redis->getRange('app_id', 0, -1);
var_dump($ret);
$ret = $redis->getRange('app_id', 3, 6);
var_dump($ret);
//設(shè)置新值,返回舊值,如果key不存在,則設(shè)置值,返回false
$ret = $redis->getSet('app_id', '666666666');
var_dump($ret);
//一次設(shè)置多個(gè)鍵值對(duì)
$ret = $redis->mset(['db_name' => 'test', 'db_host' => 'localhost']);
var_dump($ret);
//一次獲取多個(gè)鍵值對(duì),返回一個(gè)數(shù)組
$ret = $redis->mget(['db_name', 'db_host']);
var_dump($ret);
//設(shè)置鍵值,和過(guò)期時(shí)間,單位:秒,成功返回true
$ret = $redis->setex('name', 10, 'hello');
var_dump($ret);
//設(shè)置鍵值,過(guò)期時(shí)間以毫秒為單位
$ret = $redis->psetex('age', 10, '28');
var_dump($ret);
//key不存在時(shí),才設(shè)置值,key不存在且設(shè)置成功返回true,否則返回false
$ret = $redis->setnx('name', 'test');
var_dump($ret);
//setnx的批量操作,只有在所有key都不存在時(shí)才能設(shè)置成功,否則,有一個(gè)key存在,所有key都無(wú)法設(shè)置成功
$ret = $redis->msetnx(['name' => 'hello', 'age' => '28', 'sex' => '男']);
var_dump($ret);
//獲取鍵值的字符串長(zhǎng)度,如果key不存在,返回0,如果值不為字符串返回false
$ret = $redis->strlen('name');
var_dump($ret);
//將key中存儲(chǔ)的數(shù)字值加1,如果key不存在先初始為0再加1,如果存儲(chǔ)的不是數(shù)字值,則返回false,成功返回新增值
$ret = $redis->incr('age');
var_dump($ret);
//將key中存儲(chǔ)的數(shù)字值加指定增量值
$ret = $redis->incrBy('age', 10);
var_dump($ret);
//將key中存儲(chǔ)的數(shù)字值加指定浮點(diǎn)增量值
$ret = $redis->incrByFloat('age', 0.25);
var_dump($ret);
//將key中存儲(chǔ)的數(shù)字值減1
$ret = $redis->decr('age');
var_dump($ret);
//將key中存儲(chǔ)的數(shù)字值減指定減量值
$ret = $redis->decrBy('age', 10);
var_dump($ret);
//給指定key的值,追加值到原值末尾,如果key不存在,則相當(dāng)于set()函數(shù)
$ret = $redis->append('name', 'hahaha');
var_dump($ret);
四、redis的哈希(hash)操作
//設(shè)置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);
//批量設(shè)置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不存在時(shí)返回空數(shù)組
$ret = $redis->hKeys('user');
var_dump($ret);
//獲取hash表中所有字段值
$ret = $redis->hVals('user');
var_dump($ret);
//當(dāng)hash表中字段不存在時(shí),設(shè)置值。如果hash表不存在先創(chuàng)建,若字段存在,不作任何操作。
//設(shè)置成功返回true,否則返回false
$ret = $redis->hSetNx('user', 'height', 172);
var_dump($ret);
//獲取hash表的字段數(shù)量,hash不存在返回0
$ret = $redis->hlen('user');
var_dump($ret);
//為hash表中字段值增加指定增量值,如果增量值為負(fù)數(shù),則相當(dāng)于減法操作
//hash表不存在則先創(chuàng)建,字段不存在則初始為0,若字段值為字符串,則返回false
$ret = $redis->hIncrBy('user', 'age', 10);
var_dump($ret);
//為hash表中字段值增加指定浮點(diǎn)增量值
$ret = $redis->hIncrByFloat('user', 'age', 0.25);
var_dump($ret);
五、redis的列表(list)操作
//從列表頭部插入一個(gè)值
$ret = $redis->lpush('students', 'xiaoxu');
$ret = $redis->lpush('students', 'xiaoxu2');
var_dump($ret);
//從列表尾部插入一個(gè)值
$ret = $redis->rpush('students', 'xiaowang');
$ret = $redis->rpush('students', 'xiaowang2');
var_dump($ret);
//獲取列表指定范圍內(nèi)的元素,0表示第一個(gè)元素,-1表示最后一個(gè)元素
$ret = $redis->lRange('students', 0, -1);
var_dump($ret);
//將一個(gè)值插入到已存在的列表頭部,列表不存在時(shí)操作無(wú)效。
$ret = $redis->lPushx('students', 'xiaozhang');
var_dump($ret);
//將一個(gè)值插入到已存在的列表尾部,列表不存在時(shí)操作無(wú)效。
$ret = $redis->rPushx('students', 'xiaoli');
var_dump($ret);
//移出并獲取列表的第一個(gè)元素,若key不存在或不是列表則返回false。
$ret = $redis->lpop('students');
var_dump($ret);
//移出并獲取列表的最后一個(gè)元素,若key不存在或不是列表則返回false。
$ret = $redis->rpop('students');
var_dump($ret);
//移出并獲取列表的第一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
//超時(shí)時(shí)間單位:秒
$ret = $redis->blPop('students', 10);
var_dump($ret);
//移出并獲取列表的最后一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
$ret = $redis->brPop('students', 10);
var_dump($ret);
//移除列表中最后一個(gè)元素,將其插入另一個(gè)列表頭部,并返回這個(gè)元素。若源列表沒(méi)有元素則返回false。
$ret = $redis->rpoplpush('students', 'students2');
var_dump($ret);
//移除列表中最后一個(gè)元素,將其插入另一個(gè)列表頭部,并返回這個(gè)元素。
//如果列表沒(méi)有元素則會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
//超時(shí)時(shí)間單位:秒
$ret = $redis->brpoplpush('students', 'students2', 10);
var_dump($ret);
//獲取列表的長(zhǎng)度
$ret = $redis->lLen('students2');
var_dump($ret);
//通過(guò)索引獲取列表中的元素。若索引超出列表范圍則返回false。
$ret = $redis->lIndex('students2', 0);
var_dump($ret);
//通過(guò)索引設(shè)置列表中元素的值。若是索引超出范圍,或?qū)σ粋€(gè)空列表進(jìn)行l(wèi)set操作,則返回false。
$ret = $redis->lSet('students2', 0, 'xiaomi');
var_dump($ret);
//在列表中指定元素前或后面插入元素。若指定元素不在列表中,或列表不存在時(shí),不執(zhí)行任何操作。
//參數(shù):列表的key,Redis::AFTER或Redis::BEFORE,基準(zhǔn)元素,插入元素
//返回值:插入成功返回插入后列表元素個(gè)數(shù),若基準(zhǔn)元素不存在返回-1,若key不存在返回0,若key不是列表返回false。
$ret = $redis->lInsert('students2', Redis::AFTER, 'xiaomi', 'xiaoji');
var_dump($ret);
//根據(jù)第三個(gè)參數(shù)count的值,移除列表中與參數(shù)value相等的元素。
//count > 0 : 從表頭開(kāi)始向表尾搜索,移除與value相等的元素,數(shù)量為count。
//count 0 : 從表尾開(kāi)始向表頭搜索,移除與value相等的元素,數(shù)量為count的絕對(duì)值。
//count = 0 : 移除表中所有與value相等的值。
//返回實(shí)際刪除元素個(gè)數(shù)
$ret = $redis->lrem('students2', 'xiaomi', 0);
var_dump($ret);
//對(duì)列表進(jìn)行修剪,只保留指定區(qū)間的元素,其他元素都刪除。成功返回true。
$ret = $redis->ltrim('students2', 0, -1);
var_dump($ret);
六、redis的集合(set)操作
//向集合添加一個(gè)或多個(gè)成員
//若集合不存在則先創(chuàng)建,若key不是集合類(lèi)型則返回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);
//返回集合中成員的數(shù)量。
$ret = $redis->scard('friend');
var_dump($ret);
//移除并返回集合中的一個(gè)隨機(jī)元素
$ret = $redis->spop('friend');
var_dump($ret);
//返回集合中的一個(gè)或多個(gè)隨機(jī)成員元素,返回元素的數(shù)量和情況由函數(shù)的第二個(gè)參數(shù)count決定:
//如果count為正數(shù),且小于集合基數(shù),那么命令返回一個(gè)包含count個(gè)元素的數(shù)組,數(shù)組中的元素各不相同。
//如果count大于等于集合基數(shù),那么返回整個(gè)集合。
//如果count為負(fù)數(shù),那么命令返回一個(gè)數(shù)組,數(shù)組中的元素可能會(huì)重復(fù)出現(xiàn)多次,而數(shù)組的長(zhǎng)度為count的絕對(duì)值。
$ret = $redis->sRandMember('friend', 2);
var_dump($ret);
//移除集合中指定的一個(gè)元素,忽略不存在的元素。刪除成功返回1,否則返回0。
$ret = $redis->sRem('friend', 'xiaowang');
var_dump($ret);
//迭代集合中的元素
//參數(shù):集合的key,迭代器變量,匹配模式,每次返回元素?cái)?shù)量(默認(rèn)為10個(gè))
$ret = $redis->sScan('friend', $iter, 'xiao*', 5);
var_dump($ret);
var_dump($iter);
//將指定成員從一個(gè)源集合移動(dòng)到一個(gè)目的集合。
//若源集合不存在或不包含指定元素則不做任何操作,返回false。
//參數(shù):源集合,目標(biāo)集合,移動(dòng)元素
$ret = $redis->sMove('friend', 'friend2', 'xiaoxu');
var_dump($ret);
//返回所有給定集合之間的差集,不存在的集合視為空集。
$ret = $redis->sDiff('friend', 'friend2');
var_dump($ret);
//將所有給定集合之間的差集存儲(chǔ)在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回差集元素個(gè)數(shù)。
//參數(shù):第一個(gè)參數(shù)為目標(biāo)集合,存儲(chǔ)差集。
$ret = $redis->sDiffStore('friend3', 'friend2', 'friend');
var_dump($ret);
//返回所有給定集合的交集,不存在的集合視為空集。
$ret = $redis->sInter('friend', 'friend2');
var_dump($ret);
//將所有給定集合的交集存儲(chǔ)在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回交集元素個(gè)數(shù)。
//參數(shù):第一個(gè)參數(shù)為目標(biāo)集合,存儲(chǔ)交集。
$ret = $redis->sInterStore('friend4', 'friend2', 'friend');
var_dump($ret);
//返回所有給定集合的并集,不存在的集合視為空集。
$ret = $redis->sUnion('friend', 'friend2');
var_dump($ret);
//將所有給定集合的并集存儲(chǔ)在指定的目的集合中。
//若目的集合已存在則覆蓋它。返回并集元素個(gè)數(shù)。
//參數(shù):第一個(gè)參數(shù)為目標(biāo)集合,存儲(chǔ)并集。
$ret = $redis->sUnionStore('friend5', 'friend2', 'friend');
var_dump($ret);
七、redis的有序集合(sorted set)操作
//將一個(gè)或多個(gè)成員元素及其分?jǐn)?shù)值加入到有序集當(dāng)中。
//如果某個(gè)成員已經(jīng)是有序集的成員,則更新這個(gè)成員的分?jǐn)?shù)值,并通過(guò)重新插入這個(gè)成員元素,來(lái)保證該成員在正確的位置上。
//分?jǐn)?shù)值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。
$ret = $redis->zadd('scores', 60, 'math', 80, 'english', 75, 'chinese');
var_dump($ret);
//返回有序集中指定區(qū)間內(nèi)的成員。成員按分?jǐn)?shù)從小到大排序,分?jǐn)?shù)值相同的則按字典序來(lái)排序。
//參數(shù):第四個(gè)參數(shù)表示是否返回各個(gè)元素的分?jǐn)?shù)值,默認(rèn)為false。
$ret = $redis->zRange('scores', 0, -1, true);
var_dump($ret);
//返回有序集中指定區(qū)間內(nèi)的成員。成員按分?jǐn)?shù)值從大到小排序,分?jǐn)?shù)值相同的則按字典序的逆序來(lái)排序。
$ret = $redis->zRevRange('scores', 0, -1, true);
var_dump($ret);
//返回有序集中指定分?jǐn)?shù)區(qū)間的成員列表,按分?jǐn)?shù)值從小到大排序,
//分?jǐn)?shù)值相同的則按字典序來(lái)排序。默認(rèn)使用閉區(qū)間。
$ret = $redis->zRangeByScore('scores', 60, 90, ['withscores' => true]);
var_dump($ret);
//返回有序集中指定分?jǐn)?shù)區(qū)間的成員列表,按分?jǐn)?shù)值遞減排序,
//分?jǐn)?shù)值相同的則按字典序的逆序來(lái)排序。
//注意,區(qū)間表示的時(shí)候大值在前,小值在后,默認(rèn)使用閉區(qū)間。
$ret = $redis->zRevRangeByScore('scores', 90, 60, ['withscores' => true]);
var_dump($ret);
//迭代有序集合中的元素。
//返回值:[元素名 => 分?jǐn)?shù)值, ...]
$ret = $redis->zScan('scores', $iter, '*', 10);
var_dump($ret);
var_dump($iter);
//返回指定有序集的元素?cái)?shù)量。
$ret = $redis->zCard('scores');
var_dump($ret);
//返回有序集中指定分?jǐn)?shù)區(qū)間的成員數(shù)量。
$ret = $redis->zCount('scores', 60, 90);
var_dump($ret);
//返回有序集中指定成員的分?jǐn)?shù)值。若成員不存在則返回false。
$ret = $redis->zScore('scores', 'english');
var_dump($ret);
//返回有序集中指定成員的排名,按分?jǐn)?shù)值從小到大排序。分?jǐn)?shù)值最小者排名為0。
$ret = $redis->zRank('scores', 'english');
var_dump($ret);
//返回有序集中指定成員的排名,按分?jǐn)?shù)值從大到小排序。分?jǐn)?shù)值最大者排名為0。
$ret = $redis->zRevRank('scores', 'english');
var_dump($ret);
//移除有序集中的一個(gè)或多個(gè)成員,忽略不存在的成員。返回刪除的元素個(gè)數(shù)。
$ret = $redis->zRem('scores', 'english');
var_dump($ret);
//移除有序集中指定排名區(qū)間的所有成員。
$ret = $redis->zRemRangeByRank('scores', 0, 2);
var_dump($ret);
//移除有序集中指定分?jǐn)?shù)值區(qū)間的所有成員。
$ret = $redis->zRemRangeByScore('scores', 60, 90);
var_dump($ret);
//對(duì)有序集中指定成員的分?jǐn)?shù)值增加指定增量值。
//若為負(fù)數(shù)則做減法,若有序集不存在則先創(chuàng)建,若有序集中沒(méi)有對(duì)應(yīng)成員則先添加,最后再操作。
$ret = $redis->zIncrBy('scores', 2, 'chinese');
var_dump($ret);
//計(jì)算給定一個(gè)或多個(gè)有序集的交集,并將其存儲(chǔ)到一個(gè)目的有序集中。
//參數(shù):目的有序集合,多個(gè)有序集合,多個(gè)有序集合的權(quán)重,合并有序集合的方式(成員的分?jǐn)?shù)值與權(quán)重相乘后的是相加或是比較大小)
$redis->zAdd('s1', 1, '111');
$redis->zAdd('s1', 2, '222');
$redis->zAdd('s1', 3, '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', ['s1', 's2'], [1, 5], 'MIN');
// ['222' => 2, '333' => 3]
var_dump($ret);
$ret = $redis->zInter('s5', ['s1', 's2'], [1, 5], 'MAX');
// ['222' => 20, '333' => 25]
var_dump($ret);
//計(jì)算給定一個(gè)或多個(gè)有序集的并集,并將其存儲(chǔ)到一個(gè)目的有序集中。
//結(jié)果集中某個(gè)成員的分?jǐn)?shù)值是所有給定集下該成員分?jǐn)?shù)值之和。
$ret = $redis->zUnion('s6', ['s1', 's2'], [5, 1], 'SUM');
// ['111' => 5, '222' => 14, '333' => 20]
var_dump($ret);
$ret = $redis->zUnion('s7', ['s1', 's2'], [5, 1], 'MIN');
// ['222' => 4, '111' => 5, '333' => 5]
var_dump($ret);
$ret = $redis->zUnion('s8', ['s1', 's2'], [5, 1], 'MAX');
// ['111' => 5, '222' => 10, '333' => 15]
var_dump($ret);
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php+redis數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- ThinkPHP3.2框架操作Redis的方法分析
- php成功操作redis cluster集群的實(shí)例教程
- PHP操作Redis數(shù)據(jù)庫(kù)常用方法示例
- PHP操作redis實(shí)現(xiàn)的分頁(yè)列表,新增,刪除功能封裝類(lèi)與用法示例
- PHP操作Redis常用技巧總結(jié)
- PHP實(shí)現(xiàn)操作redis的封裝類(lèi)完整實(shí)例
- php操作redis緩存方法分享
- php操作redis中的hash和zset類(lèi)型數(shù)據(jù)的方法和代碼例子
- 30個(gè)php操作redis常用方法代碼例子
- php操作redis常見(jiàn)方法示例【key與value操作】