Redis是什麼?有什麼用?

在這裏插入圖片描述

什麼是Redis?

Redis:全稱"Remote Dictionary Server ",即遠程字典服務。是一個使用C語言編寫的開源、支持網絡、基於內存、可選持久性的鍵值對(key-value)存儲數據庫,根據月度排行網站DB-Engines.com的數據,Redis是最流行的鍵值對存儲數據庫。

Redis是一個NoSQL數據庫。

Redis服務的默認端口爲:6379
在這裏插入圖片描述

Redis特點

1.讀寫極佳
當數據依賴不再需要,Redis這種基於內存的性質,與在執行一個事務時將每個變化都寫入硬盤的數據庫系統相比就顯得執行效率非常高。寫與讀操作速度沒有明顯差別。因Redis是將數據加載到內存的原因,其在讀寫方面性能極佳,Redis能讀的速度是110000次/s,寫的速度是81000次/s 。

2.支持數據持久化
都知道,數據在內存中是缺乏持久性的,服務器一旦斷電或者宕機,在內存中的數據就會丟失。而Redis支持數據持久化,可以將內存中的數據保存在磁盤中,在服務器宕機或者重啓時,可以重新讀取使用。

3.支持多種數據結構
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。

4.支持數據備份
Redis支持數據的備份,即master-slave模式的數據備份。

5.具有原子性
Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性。

6.架構靈活
Redis現有多種架構,用於不同的業務場合。業務較少的情況下大多使用主從即可滿足需求,對於業務繁重的環境,大多使用集羣架構,一定程度上彌補了因內存原因導致處理數據量有限的情況。

7.功能豐富
Redis還支持 publish/subscribe(發佈/訂閱), 通知, key 過期等等特性。

8.單線程
Redis採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因爲可能出現死鎖而導致的性能消耗。

Redis應用場景

1.熱點數據緩存
熱點數據(經常會被查詢,但是不經常被修改或者刪除的數據),由於redis訪問速度塊、支持的數據類型比較豐富,首選是使用redis緩存。

2.計數器
用來對商品購買,視頻播放,文章閱讀等數據計數,爲保證數據的實時性,每次瀏覽訪問,相應的數量都要+1,有些時候併發量非常高,這對服務器來說無疑是一種挑戰。Redis讀寫性能極佳,非常適合這種計數場合。

3.消息隊列
一些訪問,點擊量高的網站中必備中間件,主要用於流量削峯,異步處理實時性低的業務。(和專門的中間件效果要差些)

其他的一些功能還有聊天室好友列表,各種排行榜,秒殺,搶購,數據過期處理等等。

Redis能解決哪些需求

需求引用自什麼是Redis?什麼是nosql?NoSQL數據庫的四大分類

1、High performance - 對數據庫高併發讀寫的需求

web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此數據庫併發負載非常高,往往要達到每秒上萬次讀寫請求。關係數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對於普通的BBS網站,往往也存在對高併發寫請求的需求,例如網站的實時統計在線用戶狀態,記錄熱門帖子的點擊次數,投票計數等,因此這是一個相當普遍的需求。

2、Huge Storage - 對海量數據的高效率存儲和訪問的需求

類似Facebook,twitter,Friendfeed這樣的SNS網站,每天用戶產生海量的用戶動態,以Friendfeed爲例,一個月就達到了2.5億條用戶動態,對於關係數據庫來說,在一張2.5億條記錄的表裏面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關係數據庫也很難應付。

3、High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求

在基於web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,爲什麼數據庫不能通過不斷的添加服務器節點來實現擴展呢?

NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

Redis的缺點

1.受限於硬件
Redis數據的容量受限於物理內存,這就導致單個Redis無法用於較大數據量的操作和運算上。

解決:可通過主從或集羣實現

2.無法發揮多核CPU
因Redis採用單線程運行,在調用CPU時,也只會採用單核,因此無法發揮多核CPU的性能。

解決:可以通過單機多臺Redis實現

3.緩存雪崩
大量key同一時間點失效,同時又有大量請求打進來,導致流量直接打在DB上,造成DB不可用。

解決:使用多級緩存,或爲熱點數據設置永不失效

4.緩存穿透
用戶大量併發請求的數據(key)對應的數據在redis和數據庫中都不存在,導致儘管數據不存在但還是每次都會進行查DB。

解決:也爲空數據緩存或者使用過濾器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章