● 請你回答一下mongodb和redis的區別
參考回答:
內存管理機制上:Redis 數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的 LRU 算法刪除數據。MongoDB 數據存在內存,由 linux系統 mmap 實現,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。
支持的數據結構上:Redis 支持的數據結構豐富,包括hash、set、list等。
MongoDB 數據結構比較單一,但是支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富
● 請你說一下mysql引擎以及其區別
參考回答:
在Mysql數據庫中,常用的引擎為Innodb和MyIASM,其中Innodb是一個事務型的存儲引擎,有行級鎖定和外鍵約束,提供了對數據庫ACID事物的支持,實現了SQL標准的四種隔離級別,即讀未提交,不可重復讀,可重復讀以及串行,其涉及目標就是處理大數據容量的數據庫系統。而MyIASM引擎是Mysql默認的引擎,不提供數據庫事務的支持,也不支持行級鎖和外鍵,因此當寫操作時需要鎖定整個表,效率較低。不過其保存了表的行數,當金星select count(*)form table時,可直接讀取已經保存的值,不需要進行全表掃描。因此當表的讀操作遠多於寫操作,並且不需要事務支持時,可以優先選擇MyIASM
● 請你來說一說Redis的定時機制怎么實現的
參考回答:
Redis服務器是一個事件驅動程序,服務器需要處理以下兩類事件:文件事件(服務器對套接字操作的抽象)和時間事件(服務器對定時操作的抽象)。Redis的定時機制就是借助時間事件實現的。
一個時間事件主要由以下三個屬性組成:id:時間事件標識號;when:記錄時間事件的到達時間;timeProc:時間事件處理器,當時間事件到達時,服務器就會調用相應的處理器來處理時間。一個時間事件根據時間事件處理器的返回值來判斷是定時事件還是周期性事件
一個時間事件主要由以下三個屬性組成:id:時間事件標識號;when:記錄時間事件的到達時間;timeProc:時間事件處理器,當時間事件到達時,服務器就會調用相應的處理器來處理時間。一個時間事件根據時間事件處理器的返回值來判斷是定時事件還是周期性事件。
● 請你來說一說Redis是單線程的,但是為什么這么高效呢?
參考回答:
雖然Redis文件事件處理器以單線程方式運行,但是通過使用I/O多路復用程序來監聽多個套接字,文件事件處理器既實現了高性能的網絡通信模型,又可以很好地與Redis服務器中其他同樣以單線程運行的模塊進行對接,這保持了Redis內部單線程設計的簡單性。
● 請問Redis的數據類型有哪些,底層怎么實現?
參考回答:
1)字符串:整數值、embstr編碼的簡單動態字符串、簡單動態字符串(SDS)
2)列表:壓縮列表、雙端鏈表
3)哈希:壓縮列表、字典
4)集合:整數集合、字典
5)有序集合:壓縮列表、跳躍表和字典
● 請問Redis的rehash怎么做的,為什么要漸進rehash,漸進rehash又是怎么實現的?
參考回答:
1)操作redis時,額外做一步rehash
對redis做讀取、插入、刪除等操作時,會把位於table[dict->rehashidx]位置的鏈表移動到新的dictht中,然后把rehashidx做加一操作,移動到后面一個槽位。
2)后台定時任務調用rehash
后台定時任務rehash調用鏈,同時可以通過server.hz控制rehash調用頻率
● 請你來說一下Redis和memcached的區別
參考回答:
1)數據類型 :redis數據類型豐富,支持set liset等類型;memcache支持簡單數據類型,需要客戶端自己處理復雜對象
2)持久性:redis支持數據落地持久化存儲;memcache不支持數據持久存儲。)
3)分布式存儲:redis支持master-slave復制模式;memcache可以使用一致性hash做分布式。
4)value大小不同:memcache是一個內存緩存,key的長度小於250字符,單個item存儲要小於1M,不適合虛擬機使用
5)數據一致性不同:redis使用的是單線程模型,保證了數據按順序提交;memcache需要使用cas保證數據一致性。CAS(Check and Set)是一個確保並發一致性的機制,屬於“樂觀鎖”范疇;原理很簡單:拿版本號,操作,對比版本號,如果一致就操作,不一致就放棄任何操作
6)cpu利用:redis單線程模型只能使用一個cpu,可以開啟多個redis進程
摘自牛客網!