Redis的11種Web應用場景

「怎樣讓Redis在你的系統中發揮做用」一文中,Salvatore 'antirez’ Sanfilippo告訴咱們如何利用Redis獨有的數據結構處理能力來解決一些常見問題。一些Redis原語命令好比LPUSH、LTRIM和LREM等等可以用來幫助開發者完成須要的任務——這些任務在傳統的數據庫存儲中很是困難或緩慢。這是一篇很是有用而且實際的文章。那麼要如何在你的框架中完成這些任務呢?html

下面列出11種Web應用場景,在這些場景下能夠充分的利用Redis的特性,大大提升效率。web

1.在主頁中顯示最新的項目列表。redis

Redis使用的是常駐內存的緩存,速度很是快。LPUSH用來插入一個內容ID,做爲關鍵字存儲在列表頭部。LTRIM用來限制列表中的項目數最多爲5000。若是用戶須要的檢索的數據量超越這個緩存容量,這時才須要把請求發送到數據庫。數據庫

2.刪除和過濾。編程

若是一篇文章被刪除,可使用LREM從緩存中完全清除掉。 緩存

3.排行榜及相關問題。網絡

排行榜(leader board)按照得分進行排序。ZADD命令能夠直接實現這個功能,而ZREVRANGE命令能夠用來按照得分來獲取前100名的用戶,ZRANK能夠用來獲取用戶排名,很是直接並且操做容易。數據結構

4.按照用戶投票和時間排序。框架

這就像Reddit的排行榜,得分會隨着時間變化。LPUSH和LTRIM命令結合運用,把文章添加到一個列表中。一項後臺任務用來獲取列表,並從新計算列表的排序,ZADD命令用來按照新的順序填充生成列表。列表能夠實現很是快速的檢索,即便是負載很重的站點。spa

5.過時項目處理。

使用unix時間做爲關鍵字,用來保持列表可以按時間排序。對current_time和time_to_live進行檢索,完成查找過時項目的艱鉅任務。另外一項後臺任務使用ZRANGE...WITHSCORES進行查詢,刪除過時的條目。

6.計數。

進行各類數據統計的用途是很是普遍的,好比想知道何時封鎖一個IP地址。INCRBY命令讓這些變得很容易,經過原子遞增保持計數;GETSET用來重置計數器;過時屬性用來確認一個關鍵字何時應該刪除。

7.特定時間內的特定項目。

這是特定訪問者的問題,能夠經過給每次頁面瀏覽使用SADD命令來解決。SADD不會將已經存在的成員添加到一個集合。

8.實時分析正在發生的狀況,用於數據統計與防止垃圾郵件等。

使用Redis原語命令,更容易實施垃圾郵件過濾系統或其餘實時跟蹤系統。

9.Pub/Sub。

在更新中保持用戶對數據的映射是系統中的一個廣泛任務。Redis的pub/sub功能使用了SUBSCRIBE、UNSUBSCRIBE和PUBLISH命令,讓這個變得更加容易。 

10.隊列。

在當前的編程中隊列隨處可見。除了push和pop類型的命令以外,Redis還有阻塞隊列的命令,可以讓一個程序在執行時被另外一個程序添加到隊列。你也能夠作些更有趣的事情,好比一個旋轉更新的RSS feed隊列。

11.緩存。

Redis緩存使用的方式與memcache相同。

網絡應用不能無休止地進行模型的戰爭,看看這些Redis的原語命令,儘管簡單但功能強大,把它們加以組合,所能完成的就更沒法想象。固然,你能夠專門編寫代碼來完成全部這些操做,但Redis實現起來顯然更爲輕鬆。

原文地址:http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in-redis.html 

相關文章
相關標籤/搜索