redis的八大特性
正常情況下,Redis執行命令的速度非常快,官方給出的數字是讀寫性能可以達到10萬/秒,當然這也取決於機器的性能,但這裏先不討論機器性能上的差異,只分析一下是什麽造就了Redis除此之快的速度,可以大致歸納為以下三點:
- Redis的所有數據都是存放在內存中的,所以把數據放在內存中是Redis速度快的最主要原因。
- Redis是用C語言實現的,一般來說C語言實現的程序“距離”操作系統更近,執行速度相對會更快。
- Redis使用了單線程架構,預防了多線程可能產生的競爭問題。
2.基於鍵值對的數據結構服務器
幾乎所有的編程語言都提供了類似字典的功能,例如Java裏的map、Python裏的dict,類似於這種組織數據的方式叫作基於鍵值的方式,與很多鍵值對數據庫不同的是,Redis中的值不僅可以是字符串,而且還可以是具體的數據結構,這樣不僅能便於在許多應用場景的開發,同時也能夠提高開發效率。Redis的全稱是REmote Dictionary Server,它主要提供了5種數據結構:字符串、哈希、列表、集合、有序集合。
3.豐富的功能
除了5種數據結構,Redis還提供了許多額外的功能:
- 提供了鍵過期功能,可以用來實現緩存。
- 提供了發布訂閱功能,可以用來實現消息系統。
- 支持Lua腳本功能,可以利用Lua創造出新的Redis命令。
- 提供了簡單的事務功能,能在一定程度上保證事務特性。
- 提供了流水線(Pipeline)功能,這樣客戶端能將一批命令一次性傳到Redis,減少了網絡的開銷。
4.簡單穩定
Redis的簡單主要表現在三個方面。
- Redis的源碼很少。
- Redis使用單線程模型,這樣不僅使得Redis服務端處理模型變得簡單,而且也使得客戶端開發變得簡單。
- Redis不需要依賴於操作系統中的類庫(例如Memcache需要依賴libevent這樣的系統類庫),Redis自己實現了事件處理的相關功能。
5.客戶端語言多
Redis提供了簡單的TCP通信協議,很多編程語言可以很方便地接入到Redis,並且由於Redis受到社區和各大公司的廣泛認可,所以支持Redis的客戶端語言也非常多,幾乎涵蓋了主流的編程語言,例如Java、PHP、Python、C、C++、Nodejs等。
6.持久化
通常看,將數據放在內存中是不安全的,一旦發生斷電或者機器故障,重要的數據可能就會丟失,因此Redis提供了兩種持久化方式:RDB和AOF,即可以用兩種策略將內存的數據保存到硬盤中(如圖所示)這樣就保證了數據的可持久性。
7.主從復制
Redis提供了復制功能,實現了多個相同數據的Redis副本(如圖所示),復制功能是分布式Redis的基礎。
8.高可用和分布式
Redis從2.8版本正式提供了高可用實現Redis Sentinel,它能夠保證Redis節點的故障發現和故障自動轉移。Redis從3.0版本正式提供了分布式實現Redis Cluster,它是Redis真正的分布式實現,提供了高可用、讀寫和容量的擴展性。
redis的八大特性