Redis的八大特點(優點)
速度快
說到Redis的速度快,大家的第一反應一定是內存讀取,那是肯定的,但如果面試的時候僅僅說到這點,那還是遠遠不夠的,至少還有以下三點要補充:
Redis是用C語言實現的,而眾所周知,C語言是“距離”操作系統最近的的編程語言,執行速度快
Redis采用了單線程的架構(這點很容易遺忘,但是是Redis的最重要特性),避免了多線程的資源競爭問題
Redis的源碼非常精簡,可以說是集性能和優雅於一身的代碼
基於鍵值對的服務器
Redis的全程是Remote Dictionary Server,是集合了五種數據結構:字符串、列表、哈希、集合、有序集合,可以說五種數據結構都是圍繞於key-value的形式,而value不僅僅可以是值,還能是具體的數據結構,這給予了Redis強大的變化性和靈活能力。
豐富的功能
除了數據結構的強大,另外就是Redis所提供的豐富的功能了:
提供了key過期的功能,這能運用於實現緩存
提供了發布訂閱的功能,可運用於消息隊列,如celery
支持lua腳本功能,當覺得Redis的命令實現功能不夠時,就能利用lua來創建新的功能
提供了簡單的事務功能,不過不能支持回滾,但也能一定程度上保持事務的特性
提供了pipeling功能,這樣客戶端可以將多條命令一次io,減少了網絡的開銷
簡單穩定
Redis的簡單表現在兩方面,一方面是在3.0版本之前源代碼僅3萬行,后面3.0加入了集群后代碼加到了5萬行,而5萬行的源代碼對於開發人員來說,要理解掌握它也顯得並不是那么難;另一方面就是Redis是單線程的結構,這使得Redis的服務端處理模型變得簡單,客戶端開發也顯得簡單。
Redis雖然代碼少,並且是單線程的,但是它又非常的穩定,很少會出現因為自身bug而down掉的情況。
客戶端語言多
Redis目前基本可以說和MySQL的知名度一樣高了,太多的運用場景,太多的支持語言,常見的比如:java的jedis,Python的redis、PHP、C、C++等等。
持久化
Redis還支持兩種方式的持久化,即將數據寫入磁盤的方法,RDB和AOF,兩種方法各有利弊,這里就不詳細介紹了。
主從復制
那數據庫的主從復制、集群功能是非常重要的,可以在Redis異常掛了后不影響客戶端的使用,而Redis也是支持主從復制功能。
redis主從復制架構
高可用和分布式
Redis從2.8版本后提供了高可用實現的Redis Sentinel,即Redis的“哨兵機制”,可以保證Redis節點的故障發現和自動轉移,這實現了Redis強大的分布式功能。
Redis的應用場景
緩存
緩存可以說是Redis最常用的功能之一了,合理的緩存不僅可以加快速度的訪問速度,以及可以減少后端的壓力(通常就是MySQL的壓力)。可以說,一個合理的緩存可以極大地提高網站的性能。
排行榜系統
利用Redis的列表和有序集合的特點,可以制作排行榜系統,而排行榜系統目前在商城類、新聞類、博客類等等,都是比不可缺的。
計數器應用
計數器的應用基本和排行榜系統一樣,都是多數網站的普遍需求,如視頻網站的播放計數,電商網站的瀏覽數等等,但這些數量一般比較龐大,如果存到關系型數據庫,對MySQL或者其他關系型數據庫的挑戰還是很大的,而Redis基本可以說是天然支持計數器應用。
消息隊列系統
Redis支持發布訂閱系統和阻塞隊列的功能,可以充當一般的消息隊列功能,雖然和專業的消息隊列MQ比如RebbitMQ比起來還優點差距,但也基本夠用了,比如celery的異步模型,Redis也是celery官方指定的2種隊列的一種。
社交網絡
對於社交網絡來說,一般用戶量是及其龐大的,此時的關系型數據庫就捉襟見肘了,比如好有點贊、關注、推送等等功能,用Redis就能比較輕松地實現這些功能。
