Redis   必知必會,別問我爲什麼

1.  簡單概括一下 Redis

Redis 是Remote Dictionary Server (即遠程字典服務)的縮寫,是一個使用C語言編寫、支持網絡、可基於內存亦可持久化的Key-Value型的非關係型數據庫。

 

2. redis有什麼優點和特性嗎,又有什麼缺點呢?

 redis 是出色的非關係型數據庫,其最吸引人的幾個特性和優點是

     1. 速度快,性能好     (按照官方說法是可以達到 讀110000次/s,寫81000次/s )

      2. 支持的數據類型豐富,除字符串,還支持哈希、列表、集合、有序集合等等。

      3.   雖然基於內存,但是支持持久化存儲。

     4. 一些 其他特性,如redis操作是原子性的,支持事務,支持發佈/訂閱  ( publish/subscribe) 模式,key過期策略等等

缺點的話, 主要是由於 其是基於內存的,所以場景會有侷限性,一般通常將其作爲緩存使用。

 

3.  什麼是關係型數據庫 ,什麼又是非關係型數據庫?

關係型數據庫即是採用了關係模型來組織數據,以行和列等爲形式展示數據的數據庫。 常見的有Oracle,MySQL 等

非關係型數據庫 則相反,並不需要按照關係模型去組織數據,只用來單純的記錄數據,一般還可以分爲,

              1.基於 鍵值對的,如redis 

              2.   基於文檔型的   如mongo

              3. 基於圖型的

              4.   基於  列 的

 4.  redis  爲什麼快 ?

主要爲以下三點

1.redis是基於內存的,內存的讀寫速度非常快;
2.redis是單線程的,省去了很多上下文切換線程的時間;
3.redis使用IO多路複用技術,可以處理併發的連接;

除以上主要三點之外,redis還對數據結構底層進行了大量優化。例如數據結構都是可哈希的,還有壓縮表、壓縮存儲、跳錶、SDS,內部編碼等 機制,這些也是對性能有改善的因素。

(附redis內存模型https://stor.51cto.com/art/201804/571477.htm

5.  redis 真的是 單線程的嗎?

通常,大家會說redis是單線程的。但是實際上,當目光僅僅聚焦於其主要業務模塊,即處理網絡請求的模塊時,它的確可以理解 爲單線程。而redis還有其他一些模塊,例如過期刪除策略過期數據和定期持久化到磁盤等,這些機制都使用的不同的線程,所以嚴格意義上說,redis並不是真的單線程。  但是由於其業務功能都在同一條線程實現,我們也可以稱其爲單線程。 

6.  redis爲什麼不採用多線程呢?

redis只是業務功能在一條線程上運行。 通常而言,使用多線程可能會讓程序運行得更快。但是對redis而言,由於其在內存中運行以及一些其底層的優化再加上io多路複用的特性,在光使用單線程時的速度就已經非常快了。我們都知道,使用多線程會非常有助於io密集型場景,但對redis而言,其真正的瓶頸是網絡帶寬和 內存大小的限制,而不是io。所以多線程對redis的提升十分有限。除此之外,多線程存在幾個十分棘手的問題,一是多線程需要在上下文切換上花費較多時間, 二是 在多線程使用過程中,往往還需要使用複雜的鎖機制、線程競爭機制等來確保線程安全。 而使用單線程,就可以避免這些問題。           

 

7. 什麼是  io多路複用?redis爲什麼使用io多路複用?

io多路複用是一種io模型,可以理解爲,一個線程管理多個socket通信 。誰先有讀寫事件就先處理哪個socket。  除此之外還有阻塞io/非阻塞io ,異步io和信號驅動io等。而且,io多路複用的io多路複用模型還存在三種實現方式,按照實現時間排列,分別爲select/poll/epoll  (epoll 只在linux,bsd是kqueue)。redis默認採用epoll,但是也提供了select和bsd系統中kqueue 的實現方式。                             詳情 ---》                      吃瓜和io模型

8. 什麼是持久化?

持久化是指將數據從不穩定介質備份到穩定介質中。通常是將內存中的數據備份到磁盤上

9. Redis 持久化機制

參考https://www.jianshu.com/p/bab8f4b26445

redis 運行在內存中,但是其提供了兩種持久化機制。

RDB :RDB是Redis默認的持久化方式,又稱爲全量備份。按照一定的時間週期策略把其在內存的所有數據以快照的形式保存到硬盤的二進制文件。對應產生的數據文件爲dump.rdb

AOF: redis會將每一個收到的寫命令都通過write函數追加到文件中(默認是 appendonly.aof)。

10 . RDB和AOF各自的優點和缺點是什麼,應該如何確定持久化方式?

參考 https://www.cnblogs.com/xingzc/p/5988080.html

 

 

 

10 . redis的數據恢復

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章