0x00 參考書籍
https://book.douban.com/subject/30386804/
0x01 Redis特性
快先紫。
1)數(shù)據(jù)放在內(nèi)存中缅疟,硬件決定速度。(主要原因)
2)C代碼衅金,貼近操作系統(tǒng)森逮。
3)單線程榨婆,規(guī)避了多線程的競爭問題。
4)代碼優(yōu)雅且高性能褒侧。key-value良风,且值類型豐富(string,hash闷供,list烟央,set,zset)
功能豐富歪脏。
1)鍵過期疑俭,可以實現(xiàn)緩存。
2)發(fā)布訂閱唾糯,可以實現(xiàn)消息功能怠硼。
3)Lua腳本(不常用)。
4)事務移怯。
5)Pipeline。簡單穩(wěn)定这难。代碼量少舟误,v3.0也就五萬行左右,一般人員也能吃透姻乓。
客戶端語言多嵌溢。幾乎覆蓋所有主流語言眯牧。
持久化。RDB && AOF赖草。
主從復制学少。分布式Redis的基礎。
高可用和分布式秧骑。Redis Sentinel(v2.8)保證節(jié)點的故障發(fā)現(xiàn)和故障自動轉移版确,Redis Cluster(v3.0)提供了高可用、讀寫和容量的擴展性乎折。
0x02 Redis的使用場景
- 緩存(string)
- 排行榜(list绒疗,zset)
- 計數(shù)器(視頻播放量等)
- 社交網(wǎng)絡(點贊、粉絲骂澄、共同好友吓蘑、推送、下拉刷新等)
- 消息隊列系統(tǒng)(list:lpush+brpop)
不適合使用的場景:
- 大數(shù)據(jù)(成本過高)
- 冷數(shù)據(jù)(浪費內(nèi)存)
0x03 為啥單線程還能這么快
- 純內(nèi)存訪問(主要)
- 非阻塞IO坟冲,使用epoll作為IO多路復用技術的實現(xiàn)磨镶。
- 單線程避免了線程切換和競態(tài)產(chǎn)生的消耗,鎖和線程切換常常是性能殺手健提。
注意:單線程對于每個命令的執(zhí)行時間有要求琳猫,過慢會導致其他命令的阻塞,所以Redis面向的是快速執(zhí)行場景的數(shù)據(jù)庫矩桂。