訊息稱蘋果明年將採用臺積電 3 奈米晶片技術,iPad Pro 2022 有望搶先 iPhone 14 首發
阿新 • • 發佈:2021-07-07
基於記憶體實現
我們都知道記憶體讀寫是比磁碟讀寫快很多的。Redis是基於記憶體儲存實現的資料庫,相對於資料存在磁碟的資料庫,就省去磁碟磁碟I/O的消耗。MySQL等磁碟資料庫,需要建立索引來加快查詢效率,而Redis資料存放在記憶體,直接操作記憶體,所以就很快。
高效的資料結構
MySQL索引為了提高效率,選擇了B+樹的資料結構。其實合理的資料結構,就是可以讓你的應用/程式更快。
合理的資料編碼
Redis是使用物件(redisObject)來表示資料庫中的鍵值,當我們在 Redis 中建立一個鍵值對時,至少建立兩個物件,一個物件是用做鍵值對的鍵物件,另一個是鍵值對的值物件。
redisObject中,type
- String:如果儲存數字的話,是用int型別的編碼;如果儲存非數字,小於等於39位元組的字串,是embstr;大於39個位元組,則是raw編碼。
- List:如果列表的元素個數小於512個,列表每個元素的值都小於64位元組(預設),使用ziplist編碼,否則使用linkedlist編碼
- Hash:雜湊型別元素個數小於512個,所有值小於64位元組的話,使用ziplist編碼,否則使用hashtable編碼。
- Set:如果集合中的元素都是整數且元素個數小於512個,使用intset編碼,否則使用hashtable編碼。
- Zset:當有序集合的元素個數小於128個,每個元素的值小於64位元組時,使用ziplist編碼,否則使用skiplist(跳躍表)編碼
I/O 多路複用
- I/O :網路 I/O
- 多路 :多個網路連線
- 複用:複用同一個執行緒。
- IO多路複用其實就是一種同步IO模型,它實現了一個執行緒可以監視多個檔案控制代碼;一旦某個檔案控制代碼就緒,就能夠通知應用程式進行相應的讀寫操作;而沒有檔案控制代碼就緒時,就會阻塞應用程式,交出cpu。