天天看點

Redis單線程模型和IO多路複用

Redis使用單線程,可以避免上下文切換,效率最高。避免了線程切換、加鎖等資源消耗

單線程指的是網絡請求子產品使用了一個線程(是以不需考慮并發安全性),即一個線程處理所有網絡請求,其他子產品仍用了多個線程。

IO多路複用指多個channel或者網絡IO,共用一個或者少量線程來處理。

為什麼使用多路複用,是因為與使用者網絡傳輸是需要等待的,IO操作不能直接傳回。是以使用IO多路複用來解決這個問題,防止一個IO阻塞影響其他IO的讀取。

檔案事件處理器使用IO多路複用子產品同時監聽多個FD(檔案描述符),有讀寫accept和close事件時,回調綁定的事件處理器。

使用epoll政策,實作哪些socket有通訊,處理那些socket、 高效

使用redis的好處:

  1. 速度快,因為資料存在記憶體中,類似于HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)
  2. 支援豐富資料類型,支援string,list,set,sorted set,hash
  3. 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行
  4. 豐富的特性:可用于緩存,消息,按key設定過期時間,過期後将會自動删除

redis的value最大可以達到1GB,key最大是512M

Redis常見性能問題和解決方案:

1、一般不在master上做持久化工作,因為寫記憶體快照時,會阻塞主線程工作,可能導緻間歇性暫停服務。

2、主從複制使用單向連結清單結構,更穩定。

繼續閱讀