一、速度快
? ? ? ?正常情況下,Redis 執?命令的速度?常快,官?給出的數字是讀寫性能可以達到 10 萬 / 秒,當然這也取決于機器的性能,但這?先不討論機器性能上的差異,只分析?下是什么造就了 Redis 如此之快,可以?概歸納為以下四點:
? Redis 的所有數據都是存放在內存中的,把數據放在內存中是 Redis 速度快的最主要原因。
? Redis 是? C 語?實現的,?般來說 C 語?實現的程序 “距離” 操作系統更近,執?速度相對會
更快。(有一定道理,但個人覺得有些牽強,因為mysql底層也是用C語言進行編寫的)
? Redis 使?了單線程,預防了多線程可能產?的競爭問題。
Redis 在 6.0 版本引?了多線程機制,但主要也是在處理?絡和 IO,不涉及到數據命令,即命令
的執?仍然采?了單線程模式。
? 作者對于 Redis 源代碼可以說是精打細磨,曾經有?評價 Redis 是少有的集性能和優雅于??的開源代碼。
二、基于鍵值對的數據結構服務器
? ? ? ?乎所有的編程語?都提供了類似字典的功能,例如 C++ ?的 map、Java ?的 map、Python ?的 dict 等,類似于這種組織數據的?式叫做基于鍵值對的?式,與很多鍵值對數據庫不同的是,Redis 中的值不僅可以是字符串,?且還可以是具體的數據結構,這樣不僅能便于在許多應?場景的開發,同時也能提?開發效率。Redis 的全程是 REmote Dictionary Server,它主要提供了 5 種數據結構:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet),同時在字符串的基礎之上演變出了位圖(Bitmaps)和 HyperLogLog 兩種神奇的 ”數據結構“,并且隨著 LBS(Location Based Service,基于位置服務)的不斷發展,Redis 3.2. 版本種加?有關 GEO(地理信息定位)的功能,總之在這些數據結構的幫助下,開發者可以開發出各種 “有意思” 的應?。
三、豐富的功能
除了 5 種數據結構,Redis 還提供了許多額外的功能:
? 提供了鍵過期功能,可以?來實現緩存。
? 提供了發布訂閱功能,可以?來實現消息系統。
? ?持 Lua 腳本功能,可以利? Lua 創造出新的 Redis 命令。
? 提供了簡單的事務功能,能在?定程度上保證事務特性。
? 提供了流?線(Pipeline)功能,這樣客?端能將?批命令?次性傳到 Redis,減少了?絡的開
銷。
四、簡單穩定
? ? ? ?Redis 的簡單主要表現在三個??。?先,Redis 的源碼很少,早期版本的代碼只有 2 萬?左右,3.0 版本以后由于添加了集群特性,代碼增? 5 萬?左右,相對于很多 NoSQL 數據庫來說代碼量相對要少很多,也就意味著普通的開發和運維?員完全可以 “吃透” 它。其次,Redis 使?單線程模型,這樣不僅使得 Redis 服務端處理模型變得簡單,?且也使得客?端開發變得簡單。最后,Redis 不需要依賴于操作系統中的類庫(例如 Memcache 需要依賴 libevent 這樣的系統類庫),Redis ??實現了事件處理的相關功能。但與簡單相對的是 Redis 具備相當的穩定性,在?量使?過程中,很少出現因為 Redis ?? BUG?導致宕掉的情況。
五、客?端語?多
? ? ? ?Redis 提供了簡單的 TCP 通信協議,很多編程語?可以很?便地接?到 Redis,并且由于 Redis 受到社區和各?公司的?泛認可,所以?持 Redis 的客?端語?也?常多,?乎涵蓋了主流的編程語?,例如 C、C++、Java、PHP、Python、NodeJS 等。
六、持久化
通常看,將數據放在內存中是不安全的,?旦發?斷電或者機器故障,重要的數據可能就會丟
失,因此 Redis 提供了兩種持久化?式:RDB 和 AOF,即可以?兩種策略將內存的數據保存到硬盤中,這樣就保證了數據的可持久性。
七、主從復制(Replication)
八、?可?(High Availability)和分布式(Distributed)