国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP+Redis開發的書簽案例實戰詳解

2024-05-05 00:10:14
字體:
來源:轉載
供稿:網友

本文實例講述了PHP+Redis開發的書簽案例。分享給大家供大家參考,具體如下:

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

場景

在項目開發過程中,相信大家都遇到過這樣的場景——一個書籍表,一個書籍標簽表,然后一本書可以有多個標簽,這個場景就和CSDN發布文章時的文章標簽差不多。

問題:如果我要查詢多個標簽共同的書籍,那么必須將表關聯查詢,這樣影響效率。我們可以使用redis來幫忙。

案例思路

在添加書籍的時候,需要添加書籍和標簽,將書籍保存到MySQL中,將標簽保存到redis的set集合中,將每個標簽看成一個set集合,然后每個標簽保存的是書籍的id信息。如果需要查詢多個標簽共同的書籍,只需要將多個集合進行交集操作。

結果圖

PHP,Redis,書簽

項目結構圖

PHP,Redis,書簽

index.html文件

在這個頁面是用來添加書籍的。

<!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>請輸入書名:<input type="text" name="title" /></p>    <p>請輸入標簽:<input type="text" name="tags" /></p>    <p><input type="submit" value="提交" /></p>  </form></body></html>

add.php文件

這個文件主要處理添加書籍。

首先生成生成自增長的id,用來給書籍的id使用,然后將標簽信息添加到redis中,最后使用pdo將書籍信息添加到數據庫中。

<?php$redis = new Redis();$redis->connect('localhost',6379);//生成自增長的id$bid = $redis->incr('bid');//將標簽信息添加到redis中$tags = explode(',',trim($_POST['tags'],','));foreach($tags as $t){  $redis->sAdd($t,$bid);}//使用pdo將書籍信息添加到數據庫中$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 '添加書籍成功';}

search.php文件

這個文件主要處理搜索界面,也就是上面效果圖的界面。首先創建一個redis對象并進行連接,然后獲取地址欄的標簽,然后將標簽轉換為數組,計算出用戶輸入標簽的數量,因為每個標簽都對應redis中的集合,所以給這幾個集合取交集就可以了。

<?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]));}

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 永顺县| 梓潼县| 宜川县| 昭平县| 安多县| 沂南县| 芜湖县| 孝义市| 禹州市| 宣武区| 罗江县| 灵山县| 富锦市| 正镶白旗| 常州市| 宁海县| 榆树市| 古浪县| 田东县| 万载县| 上杭县| 广灵县| 凯里市| 河曲县| 开江县| 方正县| 自贡市| 满城县| 大新县| 新巴尔虎左旗| 安国市| 湘西| 台北县| 长泰县| 清涧县| 镇坪县| 潮州市| 鹰潭市| 木里| 遂昌县| 封丘县|