Redis開發與運維.1.2 Redis特性
1.2 Redis特性
Redis之所以受到如此多公司的青睞,必然有之過人之處,下面是關於Redis的8個重要特性。
1.?速度快
正常情況下,Redis執行命令的速度非常快,官方給出的數字是讀寫效能可以達到10萬/秒,當然這也取決於機器的效能,但這裡先不討論機器效能上的差異,只分析一下是什麼造就了Redis除此之快的速度,可以大致歸納為以下四點:
Redis的所有資料都是存放在記憶體中的,表1-1是谷歌公司2009年給出的各層級硬體執行速度,所以把資料放在記憶體中是Redis速度快的最主要原因。
Redis是用C語言實現的,一般來說C語言實現的程式“距離”作業系統更近,執行速度相對會更快。
Redis使用了單執行緒架構,預防了多執行緒可能產生的競爭問題。
作者對於Redis原始碼可以說是精打細磨,曾經有人評價Redis是少有的集效能和優雅於一身的開原始碼。
表1-1 谷歌公司給出的各層級硬體執行速度
層 級 速 度
L1 cache reference 0.5ns
Branch mispredict 5ns
L2 cache reference 7ns
Mutex lock/unlock 25ns
Main memory reference 100ns
Compress 1K bytes with Zippy 3?000ns
Send 2K bytes over 1 Gbps network 20?000ns
Read 1 MB sequentially from Memory 250?000ns
Round trip within same datacenter 500?000ns
Disk seek 10?000?000ns
Read 1 MB sequentially from disk 20?000?000ns
Send packet CA->Netherlands->CA 150?000?000ns
2.?基於鍵值對的資料結構伺服器
幾乎所有的程式語言都提供了類似字典的功能,例如Java裡的map、Python裡的dict,類似於這種組織資料的方式叫作基於鍵值的方式,與很多鍵值對資料庫不同的是,Redis中的值不僅可以是字串,而且還可以是具體的資料結構,這樣不僅能便於在許多應用場景的開發,同時也能夠提高開發效率。Redis的全稱是REmote Dictionary Server,它主要提供了5種資料結構:字串、雜湊、列表、集合、有序集合,同時在字串的基礎之上演變出了點陣圖(Bitmaps)和HyperLogLog兩種神奇的“資料結構”,並且隨著LBS(Location Based Service,基於位置服務)的不斷髮展,Redis 3.2版本中加入有關GEO(地理資訊定位)的
功能,總之在這些資料結構的幫助下,開發者可以開發出各種“有意思”的應用。
3.?豐富的功能
除了5種資料結構,Redis還提供了許多額外的功能:
提供了鍵過期功能,可以用來實現快取。
提供了釋出訂閱功能,可以用來實現訊息系統。
支援Lua指令碼功能,可以利用Lua創造出新的Redis命令。
提供了簡單的事務功能,能在一定程度上保證事務特性。
提供了流水線(Pipeline)功能,這樣客戶端能將一批命令一次性傳到Redis,減少了網路的開銷。
4.簡單穩定
Redis的簡單主要表現在三個方面。首先,Redis的原始碼很少,早期版本的程式碼只有2萬行左右,3.0版本以後由於新增了叢集特性,程式碼增至5萬行左右,相對於很多NoSQL資料庫來說程式碼量相對要少很多,也就意味著普通的開發和運維人員完全可以“吃透”它。其次,Redis使用單執行緒模型,這樣不僅使得Redis服務端處理模型變得簡單,而且也使得客戶端開發變得簡單。最後,Redis不需要依賴於作業系統中的類庫(例如Memcache需要依賴libevent這樣的系統類庫),Redis自己實現了事件處理的相關功能。
Redis雖然很簡單,但是不代表它不穩定。以筆者維護的上千個Redis為例,沒有出現過因為Redis自身bug而宕掉的情況。
5.?客戶端語言多
Redis提供了簡單的TCP通訊協議,很多程式語言可以很方便地接入到Redis,並且由於Redis受到社群和各大公司的廣泛認可,所以支援Redis的客戶端語言也非常多,幾乎涵蓋了主流的程式語言,例如Java、PHP、Python、C、C++、Nodejs等,第4章我們將對Redis的客戶端進行詳細說明。
6.?持久化
通常看,將資料放在記憶體中是不安全的,一旦發生斷電或者機器故障,重要的資料可能就會丟失,因此Redis提供了兩種持久化方式:RDB和AOF,即可以用兩種策略將記憶體的資料儲存到硬碟中(如圖1-1所示),這樣就保證了資料的可永續性,第5章我們將對Redis的持久化進行詳細說明。
7.?主從複製
Redis提供了複製功能,實現了多個相同資料的Redis副本(如圖1-2所示),複製功能是分散式Redis的基礎。第6章我們將對Redis的複製進行詳細說明。
8.?高可用和分散式
Redis從2.8版本正式提供了高可用實現Redis
Sentinel,它能夠保證Redis節點的故障發現和故障自動轉移。Redis從3.0版本正式提供了分散式實現Redis Cluster,它是Redis真正的分散式實現,提供了高可用、讀寫和容量的擴充套件性。
相關文章
- 《Redis開發與運維》快速筆記Redis運維筆記
- 《Redis開發與運維》第一章 初識Redis 讀書筆記Redis運維筆記
- 《Redis開發與運維》慢查詢分析 讀書筆記Redis運維筆記
- redis持久化開發運維常見問題Redis持久化運維
- Redis開發運維的陷阱及避坑指南Redis運維
- redis運維手冊Redis運維
- redis運維(三)redis6.0.8安裝Redis運維
- 企業級Redis開發運維從入門到實踐 (1)—Redis 初識Redis運維
- redis安裝和運維Redis運維
- Redis 相關運維操作Redis運維
- Redis效能分析和運維工具Redis運維
- redis哨兵,叢集和運維Redis運維
- 《Redis開發與運維》第二章 API的理解和使用(下)讀書筆記Redis運維API筆記
- 《Redis開發與運維》第二章 API的理解和使用(中)讀書筆記Redis運維API筆記
- 《Redis開發與運維》第二章 API的理解和使用(上)讀書筆記Redis運維API筆記
- 40道 Redis 運維面試題Redis運維面試題
- Redis日常運維-基礎認識Redis運維
- Redis日常運維-引數詳解Redis運維
- Redis 高階特性 Redis Stream使用Redis
- Redis5 的新特性 Redis StreamRedis
- Redis日常運維-02主從複製Redis運維
- redis工具擴容收縮運維工具Redis運維
- Redis高階特性Redis
- 這 4 種 Redis 常用運維工具都不會?你算啥運維人Redis運維
- 探索Redis設計與實現14:Redis事務淺析與ACID特性介紹Redis
- Redis日常運維-常用命令彙總Redis運維
- Redis重點特性DevOpsRedisdev
- Redis5.0 新特性Redis
- Redis基礎、高階特性與效能調優Redis
- Redis 基礎、高階特性與效能調優Redis
- 工作中Redis有哪些好用的運維工具Redis運維
- Redis運維實戰之叢集中的腦裂Redis運維
- Redis 開發規範Redis
- redis開發規範Redis
- SpringBoot整合Redis開發Spring BootRedis
- Redis開發注意項Redis
- Redis 基礎特性講解Redis
- redis cluster叢集管理工具redis-trib.rb命令小結-運維筆記Redis運維筆記
- Redis開發使用指南Redis