redis是乙個key-value儲存系統。和memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(鍊錶)、set(集合)、zset(sorted set 有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-sl**e(主從)同步。
場景在專案開發過程中,相信大家都遇到過這樣的場景——乙個書籍表,乙個書籍標籤表,然後一本書可以有多個標籤,這個場景就和csdn發布文章時的文章標籤差不多。
問題:如果我要查詢多個標籤共同的書籍,那麼必須將表關聯查詢,這樣影響效率。我們可以使用redis來幫忙。
案例思路
在新增書籍的時候,需要新增書籍和標籤,將書籍儲存到mysql中,將標籤儲存到redis的set集合中,將每個標籤看成乙個set集合,然後每個標籤儲存的是書籍的iwww.cppcns.comd資訊。如果需要查詢多個標籤共同的書籍,只需要將多個集合進行交集操作。
結果圖專案結構圖
index.html檔案
在這個頁面是用來新增書籍的。
gitkceb="text/html;charset=utf-8">
document
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)
//使用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)
search.php檔案
這個檔案主要處理搜尋介面,也就是上面效果圖的介面。首先建立乙個redis物件並進行連線,然後獲取位址列的標籤,然後將標籤轉換為陣列,計算出使用者輸入標籤的數量,因為每個標籤都對應redis中的集合,所以給這幾個集合取交集就可以了。
<?php $redis = new redis();
$redis->connect('localhost',6379);
$tags = explode(',',trim($_get['tags'],','));
$len = count($tags);
if($len == 1)else if($len == 2)else if($len == 3)
php redis解決高併發案例
本指令碼依賴 php redis擴充套件,請自行安裝 商品 class good public function get string name throw new exception method not exists name todo implement get method.增加庫存 par...
ArcGIS Engine開發之書籤載入
arcgis中書籤是儲存特定檢視範圍的快捷方式。使用書籤儲存關注的檢視範圍,可在需要時快速定位 檢視與瀏覽。書籤功能主要用到imapbookmarks ispatialbookmark和iaoibookmark三個介面。通過imapbookmarks介面的bookmarks屬性可以得到地 檔中已經存...
前端開發書籤(一)
1.banner的故事 banner設計可以說是我日常工作中最主要的一塊需求,banner不比大型專案,從設計成本上來講不可能給太多的時間給設計師,所以這也引發了我對如何更有效率地完成乙個banner的思考。我覺得構成banner的重點主要有三個方面,即風格,排版以及配色。我個人的習慣是先定風格,再...