Redis的一個非常大優點就是能夠不用整個轉入到這個數據庫,而是能夠沿用之前的MySQL等數據庫,而僅在一些特定的應用場景通過Redis的特性提高效率。本文列出了11個這種Web應用場景,如顯示最新的項目列表、刪除和過濾、排行榜等相關需求。
【51CTO精選譯文】在 “怎樣讓Redis在你的系統中發揮作用”一文 中,Salvatore 'antirez’ Sanfilippo告訴我們怎樣利用Redis獨有的數據結構處理能力來解決一些常見問題。一些Redis原語命令比方LPUSH、LTRIM和LREM等等可以用來幫助開發人員完畢須要的任務——這些任務在傳統的數據庫存儲中很困難或緩慢。這是一篇很實用而且實際的文章。那么要怎樣在你的框架中完畢這些任務呢?
以下列出11種Web應用場景,在這些場景下能夠充分的利用Redis的特性,大大提高效率。
1.在主頁中顯示最新的項目列表。
Redis使用的是常駐內存的緩存,速度很快。LPUSH用來插入一個內容ID,作為keyword存儲在列表頭部。LTRIM用來限制列表中的項目數最多為5000。假設用戶須要的檢索的數據量超越這個緩存容量,這時才須要把請求發送到數據庫。
2.刪除和過濾。
假設一篇文章被刪除,能夠使用LREM從緩存中徹底清除掉。?
3.排行榜及相關問題。
排行榜(leader board)依照得分進行排序。ZADD命令能夠直接實現這個功能,而ZREVRANGE命令能夠用來依照得分來獲取前100名的用戶,ZRANK能夠用來獲取用戶排名,很直接并且操作easy。
4.依照用戶投票和時間排序。
這就像Reddit的排行榜,得分會隨著時間變化。LPUSH和LTRIM命令結合運用,把文章加入到一個列表中。一項后臺任務用來獲取列表,并又一次計算列表的排序,ZADD命令用來依照新的順序填充生成列表。列表能夠實現非常高速的檢索,即使是負載非常重的網站。
5.過期項目處理。
使用unix時間作為keyword,用來保持列表可以按時間排序。對current_time和time_to_live進行檢索,完畢查找過期項目的艱巨任務。還有一項后臺任務使用ZRANGE...WITHSCORES進行查詢,刪除過期的條目。
6.計數。
進行各種數據統計的用途是非常廣泛的,比方想知道什么時候封鎖一個IP地址。INCRBY命令讓這些變得非常easy,通過原子遞增保持計數;GETSET用來重置計數器;過期屬性用來確認一個keyword什么時候應該刪除。
7.特定時間內的特定項目。
這是特定訪問者的問題,能夠通過給每次頁面瀏覽使用SADD命令來解決。SADD不會將已經存在的成員加入到一個集合。
8.實時分析正在發生的情況,用于數據統計與防止垃圾郵件等。
使用Redis原語命令,更easy實施垃圾郵件過濾系統或其它實時跟蹤系統。
9.Pub/Sub。
在更新中保持用戶對數據的映射是系統中的一個普遍任務。Redis的pub/sub功能使用了SUBSCRIBE、UNSUBSCRIBE和PUBLISH命令,讓這個變得更加easy。?
10.隊列。
在當前的編程中隊列隨處可見。除了push和pop類型的命令之外,Redis還有堵塞隊列的命令,可以讓一個程序在運行時被還有一個程序加入到隊列。你也可以做些更有趣的事情,比方一個旋轉更新的RSS feed隊列。
11.緩存。
Redis緩存使用的方式與memcache同樣。
網絡應用不能無休止地進行模型的戰爭,看看這些Redis的原語命令,雖然簡單但功能強大,把它們加以組合,所能完畢的就更無法想象。當然,你能夠專門編寫代碼來完畢全部這些操作,但Redis實現起來顯然更為輕松。
原文: 11 Common Web Use Cases Solved In Redis
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
