濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PHP+Redis開(kāi)發(fā)的書(shū)簽案例實(shí)戰(zhàn)詳解

PHP+Redis開(kāi)發(fā)的書(shū)簽案例實(shí)戰(zhàn)詳解

熱門(mén)標(biāo)簽:百度地圖標(biāo)注偏差 百度地圖怎樣標(biāo)注圖標(biāo) 咸寧銷(xiāo)售電銷(xiāo)機(jī)器人系統(tǒng) 開(kāi)發(fā)地圖標(biāo)注類(lèi)網(wǎng)站 外呼系統(tǒng)能給企業(yè)帶來(lái)哪些好處 400電話(huà)蘭州申請(qǐng)請(qǐng) 廣東廣州在怎么申請(qǐng)400電話(huà) 余姚電話(huà)機(jī)器人 電銷(xiāo)機(jī)器人問(wèn)門(mén)薩維品牌my

本文實(shí)例講述了PHP+Redis開(kāi)發(fā)的書(shū)簽案例。分享給大家供大家參考,具體如下:

redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類(lèi)似,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set 有序集合)和hash(哈希類(lèi)型)。這些數(shù)據(jù)類(lèi)型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。

場(chǎng)景

在項(xiàng)目開(kāi)發(fā)過(guò)程中,相信大家都遇到過(guò)這樣的場(chǎng)景——一個(gè)書(shū)籍表,一個(gè)書(shū)籍標(biāo)簽表,然后一本書(shū)可以有多個(gè)標(biāo)簽,這個(gè)場(chǎng)景就和CSDN發(fā)布文章時(shí)的文章標(biāo)簽差不多。

問(wèn)題:如果我要查詢(xún)多個(gè)標(biāo)簽共同的書(shū)籍,那么必須將表關(guān)聯(lián)查詢(xún),這樣影響效率。我們可以使用redis來(lái)幫忙。

案例思路

在添加書(shū)籍的時(shí)候,需要添加書(shū)籍和標(biāo)簽,將書(shū)籍保存到MySQL中,將標(biāo)簽保存到redis的set集合中,將每個(gè)標(biāo)簽看成一個(gè)set集合,然后每個(gè)標(biāo)簽保存的是書(shū)籍的id信息。如果需要查詢(xún)多個(gè)標(biāo)簽共同的書(shū)籍,只需要將多個(gè)集合進(jìn)行交集操作。

結(jié)果圖

項(xiàng)目結(jié)構(gòu)圖

index.html文件

在這個(gè)頁(yè)面是用來(lái)添加書(shū)籍的。

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
head>
  meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  title>Document/title>
/head>
body>
  form action="add.php" method="post">
    p>請(qǐng)輸入書(shū)名:input type="text" name="title" />/p>
    p>請(qǐng)輸入標(biāo)簽:input type="text" name="tags" />/p>
    p>input type="submit" value="提交" />/p>
  /form>
/body>
/html>

add.php文件

這個(gè)文件主要處理添加書(shū)籍。

首先生成生成自增長(zhǎng)的id,用來(lái)給書(shū)籍的id使用,然后將標(biāo)簽信息添加到redis中,最后使用pdo將書(shū)籍信息添加到數(shù)據(jù)庫(kù)中。

?php
$redis = new Redis();
$redis->connect('localhost',6379);
//生成自增長(zhǎng)的id
$bid = $redis->incr('bid');
//將標(biāo)簽信息添加到redis中
$tags = explode(',',trim($_POST['tags'],','));
foreach($tags as $t){
  $redis->sAdd($t,$bid);
}
//使用pdo將書(shū)籍信息添加到數(shù)據(jù)庫(kù)中
$dsn = 'mysql:host=localhost;dbname=test';
$pdo = new PDO($dsn,'root','1234');
$pdo->query('set names utf8');
$sql = 'insert into book values(?,?)';
$st = $pdo->prepare($sql);
$line = $st->execute([$bid,$_POST['title']]);
if($line != 0){
  echo '添加書(shū)籍成功';
}

search.php文件

這個(gè)文件主要處理搜索界面,也就是上面效果圖的界面。首先創(chuàng)建一個(gè)redis對(duì)象并進(jìn)行連接,然后獲取地址欄的標(biāo)簽,然后將標(biāo)簽轉(zhuǎn)換為數(shù)組,計(jì)算出用戶(hù)輸入標(biāo)簽的數(shù)量,因?yàn)槊總€(gè)標(biāo)簽都對(duì)應(yīng)redis中的集合,所以給這幾個(gè)集合取交集就可以了。

?php
$redis = new Redis();
$redis->connect('localhost',6379);
$tags = explode(',',trim($_GET['tags'],','));
$len = count($tags);
if($len == 1){
  var_dump($redis->sMembers($tags[0]));
}else if($len == 2){
  var_dump($redis->sInter($tags[0],$tags[1]));
}else if($len == 3){
  var_dump($redis->sInter($tags[0],$tags[1],$tags[2]));
}

更多關(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ì)有所幫助。

您可能感興趣的文章:
  • PHP+redis實(shí)現(xiàn)微博的推模型案例分析
  • PHP使用redis消息隊(duì)列發(fā)布微博的方法示例
  • PHP基于Redis消息隊(duì)列實(shí)現(xiàn)發(fā)布微博的方法
  • php結(jié)合redis高并發(fā)下發(fā)帖、發(fā)微博的實(shí)現(xiàn)方法
  • PHP+redis實(shí)現(xiàn)的購(gòu)物車(chē)單例類(lèi)示例
  • php結(jié)合redis實(shí)現(xiàn)高并發(fā)下的搶購(gòu)、秒殺功能的實(shí)例
  • PHP實(shí)現(xiàn)操作redis的封裝類(lèi)完整實(shí)例
  • 項(xiàng)目中應(yīng)用Redis+Php的場(chǎng)景
  • PHP的Laravel框架結(jié)合MySQL與Redis數(shù)據(jù)庫(kù)的使用部署
  • php+redis實(shí)現(xiàn)商城秒殺功能
  • php+redis實(shí)現(xiàn)注冊(cè)、刪除、編輯、分頁(yè)、登錄、關(guān)注等功能示例
  • PHP+redis實(shí)現(xiàn)微博的拉模型案例詳解

標(biāo)簽:麗江 衡陽(yáng) 臨沂 重慶 銅陵 鷹潭 巴彥淖爾 十堰

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP+Redis開(kāi)發(fā)的書(shū)簽案例實(shí)戰(zhàn)詳解》,本文關(guān)鍵詞  PHP+Redis,開(kāi)發(fā),的,書(shū)簽,案例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP+Redis開(kāi)發(fā)的書(shū)簽案例實(shí)戰(zhàn)詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PHP+Redis開(kāi)發(fā)的書(shū)簽案例實(shí)戰(zhàn)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    株洲市| 洪江市| 肥西县| 延长县| 双鸭山市| 格尔木市| 大安市| 枝江市| 吴堡县| 治多县| 泾源县| 汝州市| 赣州市| 固阳县| 宣武区| 页游| 类乌齐县| 饶平县| 横峰县| 卢龙县| 惠来县| 武夷山市| 区。| 克什克腾旗| 布尔津县| 宜君县| 甘南县| 永德县| 青海省| 巴彦淖尔市| 嘉义市| 科技| 砚山县| 德钦县| 双桥区| 波密县| 山阳县| 龙里县| 涟水县| 红河县| 连云港市|