Redis是什么?簡述它的優缺點?
Redis本質上是一個Key-Value類型的內存數據庫,很像Memcached,整個數據庫加載在內存當中操作,定期通過異步操作把數據庫中的數據flush到硬盤上進行保存。
因為是純內存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value 數據庫。
優點:
讀寫性能極高, Redis能讀的速度是110000次/s,寫的速度是81000次/s。
支持數據持久化,支持AOF和RDB兩種持久化方式。
支持事務, Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
數據結構豐富,除了支持string類型的value外,還支持hash、set、zset、list等數據結構。
支持主從復制,主機會自動將數據同步到從機,可以進行讀寫分離。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等特性。
缺點:
數據庫容量受到物理內存的限制,不能用作海量數據的高性能讀寫,因此Redis適合的場景主要局限在較小數據量的高性能操作和運算上。
2. Redis為什么這么快?
內存存儲:Redis是使用內存(in-memeroy)存儲,沒有磁盤IO上的開銷。數據存在內存中,類似于 HashMap,HashMap 的優勢就是查找和操作的時間復雜度都是O(1)。
單線程實現( Redis 6.0以前):Redis使用單個線程處理請求,避免了多個線程之間線程切換和鎖資源爭用的開銷。注意:單線程是指的是在核心網絡模型中,網絡請求模塊使用一個線程來處理,即一個線程處理所有網絡請求。
非阻塞IO:Redis使用多路復用IO技術,將epoll作為I/O多路復用技術的實現,再加上Redis自身的事件處理模型將epoll中的連接、讀寫、關閉都轉換為事件,不在網絡I/O上浪費過多的時間。
優化的數據結構:Redis有諸多可以直接應用的優化數據結構的實現,應用層可以直接使用原生的數據結構提升性能。
使用底層模型不同:Redis直接自己構建了 VM (虛擬內存)機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
Redis的VM(虛擬內存)機制就是暫時把不經常訪問的數據(冷數據)從內存交換到磁盤中,從而騰出寶貴的內存空間用于其它需要訪問的數據(熱數據)。通過VM功能可以實現冷熱數據分離,使熱數據仍在內存中、冷數據保存到磁盤。這樣就可以避免因為內存不足而造成訪問速度下降的問題。
Redis提高數據庫容量的辦法有兩種:一種是可以將數據分割到多個RedisServer上;另一種是使用虛擬內存把那些不經常訪問的數據交換到磁盤上。需要特別注意的是Redis并沒有使用OS提供的Swap,而是自己實現。
-
數據
+關注
關注
8文章
7048瀏覽量
89070 -
內存
+關注
關注
8文章
3028瀏覽量
74076 -
Redis
+關注
關注
0文章
376瀏覽量
10880
發布評論請先 登錄
相關推薦
評論