redis使用總結-redis應用場景

Redis是一種高級key-value數據庫。它跟memcached相似,不過數據能夠持久化,並且支持的數據類型很豐富。有字符串,鏈表,集 合和有序集合。支持在服務器端計算集合的並,交和補集(difference)等,還支持多種排序功能。因此Redis也能夠被當作是一個數據結構服務器。redis

Redis的全部數據都是保存在內存中,而後不按期的經過異步方式保存到磁盤上(這稱爲「半持久化模式」);也能夠把每一次數據變化都寫入到一個append only file(aof)裏面(這稱爲「全持久化模式」)數據庫

毫無疑問,Redis開創了一種新的數據存儲思路,使用Redis,咱們不用在面對功能單調的數據庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用Redis靈活多變的數據結構和數據操做,爲不一樣的大象構建不一樣的冰箱。但願你喜歡這個比喻。緩存

下面是一篇新鮮出爐的文章,其做者是Redis做者@antirez,他描述了Redis比較適合的一些應用場景,供你們一覽:服務器

1.取最新N個數據的操做

好比典型的取你網站的最新文章,經過下面方式,咱們能夠將最新的5000條評論的ID放在Redis的List集合中,並將超出集合部分從數據庫獲取數據結構

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

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

  • 而後咱們在客戶端獲取某一頁評論時能夠用下面的邏輯(僞代碼)memcached

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_list
END

若是你還有不一樣的篩選維度,好比某個分類的最新N條,那麼你能夠再建一個按此分類的List,只存ID的話,Redis是很是高效的。性能

2.排行榜應用,取TOP N操做

這個需求與上面需求的不一樣之處在於,前面操做以時間爲權重,這個是以某個條件爲權重,好比按頂的次數排序,這時候就須要咱們的sorted set出馬了,將你要排序的值設置成sortedset的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甚至能夠構建有優先級的隊列系統。

9.緩存

這個沒必要說了,性能優於Memcached,數據結構更多樣化。

相關文章
相關標籤/搜索