什麼是redis? 爲什麼 怎麼用?
1.0 Redis簡介
Redis是完全開源免費的,遵守BSD協議的高性能(NOSQL)的key-value數據庫,是一個開源的用ANSI C語言編寫的、支持網絡、可基於內存亦可持久化的日誌型,key-value數據庫,並提供多種語言的API
1.1NOSQL
NOSQL泛指非關係型的數據庫,NOSQL即not-Only SQL ,他可以作爲關係型數據庫的良好補充
傳統的關係型數據庫應付web2.0 提別是超大規模和高併發的SNS類型的web2.0的純動態網站已經顯得力不從心,暴露了很多難以克服的問題。例如:
1.High erformance- 對於數據庫高併發的讀寫需求
2.Huge Storage age -對數據庫的高效率存儲訪問需求
3.High Scalablity && Hige Availablity -對於數據庫的高可擴展性和高可用性的需求
1.2NOSQL的類別
鍵值(key-value)存儲數據庫
這類數據庫會使用到一個哈希表,這個表中會有特定的鍵和一個指針指向忑頂的數據key-value模型對於IT系統來說優勢在於簡單、易部署、但是DBA只對於部分值查詢或者更新的時候,key-value就顯得效率低下了。
相關產品:Tokyo、Cablinet、Redis、Voldemort
典型應用:內容緩存,主要用於處理大浪數據的高訪問負載
數據模型:一系列鍵值對
優勢:快速查詢
劣勢:存儲的數據缺少結構化
列存儲數據庫
這部分數據庫通常是用來對應分佈式存儲的海量數據,鍵任然存在,但他們的特點是指向了多個列,這些列是由列家族安排的。
相關產品:Cassandra、HBase、Riak
典型應用:分佈式的文件系統
數據模型:以列簇式存儲,將同一列數據存在一起
又是:查找速度快、可擴展性強、更容易進行分佈式擴展
劣勢:功能相對侷限
文檔型數據庫
圖形數據庫
總結:
- NOSQL數據庫在以下幾種情況中比較適用:
- 數據模型比較簡單
- 需要星火性更強的IT系統
- 對數據庫性能要求高
- 不需要高度的數據一致性
- 對於給定的key,比較容易映射覆雜環境
- NOSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據的應用難題
1.3Redis特點
- 性能極高:Redis能讀的速度是1100000次/秒,寫的速度是810000次/秒
- 豐富的數據類型:Redis支持string、hash、List、set、以及Ordered set數據類型的操作
- 原子性:Redis的所有操作都是原子性的,多個操作也支持事務,通過MULTI和EXEC指令包起來
- 豐富的特性:Redis還支持publish/subscribe。通知、key過期等特性
- 高速讀寫:Redis使用自己實現的分離器,代碼量很短、沒有使用lock,因此效率高
1.4Redis的應用場景
企業開發中:可以用作數據庫、緩存、熱點數據(經常被查詢、但是不經常被修改或者刪除的數據)和消息中間件當大部分功能
redis的常用場景如下:
-
緩存
緩存現在幾乎是所有中大型網站都在用的必殺技,合理利用緩存不僅能夠提升網站訪問速度、還能大大降低數據庫的壓力、redis提供了鍵過期功能也提供了鍵淘汰策略,所以Redis用緩存的場景非常多。 -
排行榜
Redis提供的有序集合數據類結構能夠實現各種複雜的排行榜應用 -
計數器
什麼是計數器,如網站商品的瀏覽量、視頻網站視頻的播放數等 -
分佈式會話
在集羣模式下搭建咦Redis等內存數據爲中心的session服務
5.分佈式鎖
可以利用Redis的setnx功能來編寫分佈式鎖
- 消息系統
消息隊列是大型網站比用的中漸漸,如ActiveMQ、RabbitMQ、Kafka等,主要用於業務解耦、流量削峯以及異步處理實時性低的業務。redis提供了發佈/訂閱以及阻塞隊列功能,能實現一個簡單的消息隊列系統。
1.5Redis總結
1.5.1 redis優勢
-
性能極高:Redis能讀的速度是1100000次/秒,寫的速度是810000次/秒
-
豐富的數據類型:Redis支持string、hash、List、set、以及Ordered set數據類型的操作
-
原子性:Redis的所有操作都是原子性的,多個操作也支持事務,通過MULTI和EXEC指令包起來
-
豐富的特性:Redis還支持publish/subscribe。通知、key過期等特性
-
高速讀寫:Redis使用自己實現的分離器,代碼量很短、沒有使用lock,因此效率高
1.5.2 Redis缺點
- 持久化:RDB和AOF
- 耗內存:內存佔用過高