Redis在11種Web應用情境下的充分發揮

來源:互聯網
上載者:User
下面列出11種Web應用情境,在這些情境下可以充分的利用Redis的特性,大大提高效率。

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

Redis使用的是常駐記憶體的緩衝,速度非常快。LPUSH用來插入一個內容ID,作為關鍵字儲存在列表頭部。LTRIM用來限制列表中的項目數最多為5000。如果使用者需要的檢索的資料量超越這個緩衝容量,這時才需要把請求發送到資料庫。

2.刪除和過濾。

如果一篇文章被刪除,可以使用LREM從緩衝中徹底清除掉。

3.熱門排行榜及相關問題。

熱門排行榜(leader board)按照得分進行排序。ZADD命令可以直接實現這個功能,而ZREVRANGE命令可以用來按照得分來擷取前100名的使用者,ZRANK可以用來擷取使用者排名,非常直接而且操作容易。

4.按照使用者投票和時間排序。

這就像Reddit的熱門排行榜,得分會隨著時間變化。LPUSH和LTRIM命令結合運用,把文章添加到一個列表中。一項背景工作用來擷取列表,並重新計算資料行表的排序,ZADD命令用來按照新的順序填充產生列表。列表可以實現非常快速的檢索,即使是負載很重的網站。

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實現起來顯然更為輕鬆。

毫無疑問,Redis開創了一種新的資料存放區思路,使用Redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用Redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。

下面是一篇新鮮出爐的文章,其作者是Redis作者@antirez,他描述了Redis比較適合的一些應用情境,NoSQLFan簡單列舉在這裡,供大家一覽:

1.取最新N個資料的操作

比如典型的取你網站的最新文章,通過下面方式,我們可以將最新的5000條評論的ID放在Redis的List集合中,並將超出集合部分從資料庫擷取

  • 使用LPUSH latest.comments<ID>命令,向list集合中插入資料

  • 插入完成後再用LTRIM latest.comments 0 5000命令使其永遠只儲存最近5000個ID

  • 然後我們在用戶端擷取某一頁評論時可以用下面的邏輯(虛擬碼)

FUNCTION get_latest_comments(start,num_items):    id_list = redis.lrange("latest.comments",start,start+num_items-1)    IF id_list.length < num_items        id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")    END    RETURN id_listEND

如果你還有不同的篩選維度,比如某個分類的最新N條,那麼你可以再建一個按此分類的List,只存ID的話,Redis是非常高效的。

2.熱門排行榜應用,取TOP N操作

這個需求與上面需求的不同之處在於,前面操作以時間為權重,這個是以某個條件為權重,比如按頂的次數排序,這時候就需要我們的sorted set出馬了,將你要排序的值設定成sorted set的score,將具體的資料設定成相應的value,每次只需要執行一條ZADD命令即可。

3.需要精準設定到期時間的應用

比如你可以把上面說到的sorted set的score值設定成到期時間的時間戳記,那麼就可以簡單地通過到期時間排序,定時清除到期資料了,不僅是清除Redis中的到期資料,你完全可以把Redis裡這個到期時間當成是對資料庫中資料的索引,用Redis來找出哪些資料需要到期刪除,然後再精準地從資料庫中刪除相應的記錄。

4.計數器應用

Redis的命令都是原子性的,你可以輕鬆地利用INCR,DECR命令來構建計數器系統。

5.Uniq操作,擷取某段時間所有資料排重值

這個使用Redis的set資料結構最合適了,只需要不斷地將資料往set中扔就行了,set意為集合,所以會自動排重。

6.即時系統,反垃圾系統

通過上面說到的set功能,你可以知道一個終端使用者是否進行了某個操作,可以找到其操作的集合并進行分析統計對比等。沒有做不到,只有想不到。

7.Pub/Sub構建即時訊息系統

Redis的Pub/Sub系統可以構建即時的訊息系統,比如很多用Pub/Sub構建的即時聊天系統的例子。

8.構建隊列系統

使用list可以構建隊列系統,使用sorted set甚至可以構建有優先順序的隊列系統。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.