redis最適合所有資料in-momory的場景,雖然redis也提供持久化功能,但實際更多的是乙個disk-backed的功能,跟傳統意義上的持久化有比較大的差別,那麼可能大家就會有疑問,似乎redis更像乙個加強版的memcached,那麼何時使用memcached,何時使用redis呢?
如果簡單地比較redis與memcached的區別,大多數都會得到以下觀點:
(1)、會話快取(session cache)
最常用的一種使用redis的情景是會話快取(session cache)。用redis快取會話比其他儲存(如memcached)的優勢在於:redis提供持久化。當維護乙個不是嚴格要求一致性的快取時,如果使用者的購物車資訊全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?
幸運的是,隨著 redis 這些年的改進,很容易找到怎麼恰當的使用redis來快取會話的文件。甚至廣為人知的商業平台magento也提供redis的外掛程式。
(2)、全頁快取(fpc)
除基本的會話token之外,redis還提供很簡便的fpc平台。回到一致性問題,即使重啟了redis例項,因為有磁碟的持久化,使用者也不會看到頁面載入速度的下降,這是乙個極大改進,類似php本地fpc。
再次以magento為例,magento提供乙個外掛程式來使用redis作為全頁快取後端。
此外,對wordpress的使用者來說,pantheon有乙個非常好的外掛程式 wp-redis,這個外掛程式能幫助你以最快速度載入你曾瀏覽過的頁面。
(3)、佇列
reids在記憶體儲存引擎領域的一大優點是提供 list 和 set 操作,這使得redis能作為乙個很好的訊息佇列平台來使用。redis作為佇列使用的操作,就類似於本地程式語言(如python)對 list 的 push/pop 操作。
如果你快速的在google中搜尋「redis queues」,你馬上就能找到大量的開源專案,這些專案的目的就是利用redis建立非常好的後端工具,以滿足各種佇列需求。例如,celery有乙個後台就是使用redis作為broker,你可以從這裡去檢視。
(4)、排行榜/計數器
redis在記憶體中對數字進行遞增或遞減的操作實現的非常好。集合(set)和有序集合(sorted set)也使得我們在執行這些操作的時候變的非常簡單,redis只是正好提供了這兩種資料結構。所以,我們要從排序集合中獲取到排名最靠前的10個使用者–我們稱之為「user_scores」,我們只需要像下面一樣執行即可:
當然,這是假定你是根據你使用者的分數做遞增的排序。如果你想返回使用者及使用者的分數,你需要這樣執行:
zrange user_scores 0 10 withscores
agora games就是乙個很好的例子,用ruby實現的,它的排行榜就是使用redis來儲存資料的,你可以在這裡看到。
(5)、發布/訂閱
最後(但肯定不是最不重要的)是redis的發布/訂閱功能。發布/訂閱的使用場景確實非常多。我已看見人們在社交網路連線中使用,還可作為基於發布/訂閱的指令碼觸發器,甚至用redis的發布/訂閱功能來建立聊天系統!(不,這是真的,你可以去核實)。
redis提供的所有特性中,我感覺這個是喜歡的人最少的乙個,雖然它為使用者提供如果此多功能。
Redis應用場景
redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。redis常用資料型別 redis最為常用的資料型別主要有以下五種 在具體描述這幾種資料型別之...
Redis應用場景
redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。redis常用資料型別 redis最為常用的資料型別主要有以下五種 在具體描述這幾種資料型別之...
Redis應用場景
閱讀 31,232 次 毫無疑問,redis 開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。下面是一篇新鮮出爐的文章,其作者是re...