Redis應用場景分析
Redis是一個基於記憶體亦可持久化的日誌型、Key-Value儲存庫系統。在專案開發過程中,合理利用Redis實現特定應用場景,對系統效率的提高意義非常大。應用場景列舉如下:
1.最新。
Redis使用的是常駐記憶體的快取,速度非常快。lpush用來插入一個內容id,作為關鍵字儲存在列表頭部。ltrim用來限制列表中的專案數最多為5000。如果使用者需要的檢索的資料量超越這個快取容量,這時才需要把請求傳送到資料庫。
2.刪除和過濾。
如果一篇文章被刪除,可以使用lrem從快取中徹底清除掉。
3.排行榜及相關問題。
排行榜(leader board)按照得分進行排序。zadd命令可以直接實現這個功能,而zrevrange命令可以用來按照得分來獲取前100名的使用者,zrank可以用來獲取使用者排名,非常直接而且操作容易。
4.按照使用者投票和時間排序。
排行榜會隨著時間變化。lpush和ltrim命令結合運用,把文章新增到一個列表中。一項後臺任務用來獲取列表,並重新計算列表的排序,zadd命令用來按照新的順序填充生成列表。列表可以實現非常快速的檢索,即使是負載很重的站點。
5.計數。
進行各種資料統計的用途是非常廣泛的,比如想知道什麼時候封鎖一個ip地址。incrby命令讓這些變得很容易,通過原子遞增保持計數;getset用來重置計數器;過期屬性用來確認一個關鍵字什麼時候應該刪除。
6.特定時間內的特定專案。
這是特定訪問者的問題,可以通過給每次頁面瀏覽使用sadd命令來解決。sadd不會將已經存在的成員新增到一個集合。
7.實時分析正在發生的情況,用於資料統計與防止垃圾郵件等。
使用redis原語命令,更容易實施垃圾郵件過濾系統或其他實時跟蹤系統。
8.pub/sub。
在更新中保持使用者對資料的對映是系統中的一個普遍任務。redis的pub/sub功能使用了subscribe、unsubscribe和publish命令,讓這個變得更加容易。
9.佇列。
在當前的程式設計中佇列隨處可見。除了push和pop型別的命令之外,redis還有阻塞佇列的命令,能夠讓一個程式在執行時被另一個程式新增到佇列。
10.快取。
redis快取使用的方式與memcache相同。