在6.0之前,redis基本上是單線程的,但不代表只有壹個線程。比如通過執行unlink操作(unlink和del命令壹樣是用來刪除壹個鍵的,但是unlink是異步的,適合刪除壹個大的鍵)來刪除壹個大的鍵的時候,會用壹個單獨的線程來完成,否則會阻塞主線程,或者有IO操作慢的時候用壹個單獨的線程來完成,或者持久的時候用壹個單獨的線程來完成。
6.0以後,增加了多線程的實現。io操作中使用了多線程,工作線程只是單線程,或者是串行實現的。許多io線程用於讀取或寫入。
多線程不執行讀寫操作。所有額外的線程要麽用於讀取,要麽用於寫入。
多線程配置默認是關閉的,需要通過配置打開。
如果不在本地實現JVM緩存,對於redis服務器在大並發情況下也是壹個考驗,所以redis提出了客戶端緩存方案。
主要實現過程如下。
可以根據命令和按鍵來控制對連接的訪問。
redis6之前只能通過密碼控制,以及調整flushdb、keys*、shutdown等高風險命令的權限。通過重命名。
在redis6之後,提供了更細粒度的權限控制。
通過增加設置,在傳輸中使用SSL協議,保證傳輸過程的安全性。
當SSL模塊打開時,不能使用多線程。
增加RESP3對等協議,優化服務器與客戶端的通信。