Redis是一個Key-Value存儲系統,它支持存儲的value類型不少,包括string、list(鏈表)、set(集合)、zset(有序集合)。這些數據類型都支持push/pop、add/remove以及取交集和並集等豐富的操做。Redis支持各類不一樣方式的排序。數據庫
爲了保證效率,數據都是還存在內存中的,它也能夠週期性地把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件。緩存
Redis做爲一種NoSQL解決方案,適用於如下場景:數據結構
1 對數據高併發讀寫併發
2 對海量數據的高效存儲和訪問app
3 對數據的高可擴展像性和高可用性。(知識鏈接:「高可用性」(High Availability)一般來描述一個系統通過專門的設計,從而減小停工時間,而保持其服務的高度可用性。)分佈式
Redis是非關係型、分佈式的、開源的、水平可擴展的。不遵循關係型數據庫的 SQL標準、ACID屬性、表結構等。高併發
這裏溫故而知新吧,所謂ACID屬性指的是對事務的支持。spa
好比數據庫裏:.net
happyBKs 10000元設計
GF 1元
這時有個操做是happyBKs給GF匯款8000元的事務。
該事務包含了兩個操做:
happyBKs 10000-8000
GF 1+8000
正常運行下,結果應該是:
happyBKs 2000元 T_T
GF 8001元 : )
可是,若是如今系統執行完第一個操做時發生了故障會怎麼樣呢?
若是數據庫支持事務,即支持ACID,那麼系統將回滾到最初狀態:
happyBKs 10000元 : )
GF 1元 : (
若是數據庫不支持事務,即不支持ACID,那麼系統則會:
happyBKs 10000-8000=2000元 T_T
GF 1元 : (
(彩蛋:其實,happyBKs has no GF now,T_T. 本文時oschina用戶happyBKs的博客文章,轉載請說明出處。)
那麼Redis適用哪些場景呢?
目前最大的Redis用戶時新浪微博,有幾百臺物理機和更多的端口在運行着Redis。
Redis的適用場景:
1 應用程序直接訪問Redis程序。(這種作法的缺點時若是Redis Server掛了,或者內存釋放了,Redis的數據將永久丟失)
2 應用程序直接訪問Redis,只有當Redis訪問失敗時才訪問MySQL。(Redis集羣會和MySQL集羣進行同步。當Redis Server掛了以後,應用會去找MySQL)
Redis數據庫提供多種靈活的數據結構和數據操做,十分靈活。
具體的適用場景或者說Redis真正適合作哪些事情:
1 取最新的N個數據的操做。例如,取最新的500篇新聞。
2 排行榜應用,取TOP N操做。
3 須要精確設定過時時間的應用。(這是MySQL沒法作到的。Redis能夠設置過時,如用setex方法,在個人博客該系列的後面的文章會介紹。你們清關注happyBKs的博客。)
4 計數器應用。(新浪微博大量使用)
5 Uniq操做(排重,惟一操做),獲取某段時間全部的數據排重值。
6 實時系統,反垃圾系統
7 Pub/Sub構建實時消息系統。(pub是發佈,sub是訂閱)
8 構建隊列系統。(注意:Redis的數據類型中有list,對應於棧、隊列等)
9 緩存
本文出處:http://my.oschina.net/u/1156339/blog/387246
若是你仍是對Redis沒有一個直觀的感覺,那麼下面我將對Redis、MySQL和MongoDB作一個比較。
Redis | MySQL | MongoDB |
有庫的概念 | 有庫的概念 | 有庫的概念 |
無 | 有表的概念 | 無表,有集合的概念 |
無 | 字段,行的列 | 無 |
因此,NoSQL不存在表結構。