摘要:所以為了鍛煉自己的數據結構與算法能力,我參照其中一些數據結構的,對諸如動態字符串,雙端鏈表,字典及其內嵌的哈希表等數據結構進行了實現。
緣起
近期在閱讀《Redis設計與實現》一書,我發現如果不動手實踐,顯然是無法真正理解書上奇形怪狀的數據結構的。
所以為了鍛煉自己的數據結構與算法能力,我參照其中一些數據結構的API,對諸如動態字符串SDS,雙端鏈表list,字典dict及其內嵌的哈希表dictht等數據結構進行了實現。
當然,為了讓他們有用武之地,我在這基礎上構建了一個小型Redis,作為自己的學習記錄。當然現在的項目功能還不夠完善,后期我會慢慢將其完善,懇請批評指教!
github鏈接
如今本項目還只是實現了key-value的存儲功能,其他諸如切換數據庫、數據持久化等功能將會在后期慢慢實現。
項目實現流程如下:
基本數據結構的構建
客戶端服務端的交互
基本命令的實現
下面主要介紹數據庫結構redisDb的構建,其他數據結構可以參見我的系列文章:
動態字符串SDS的實現 | 自己實現Redis源代碼(1)
雙端鏈表list的實現 | 自己實現Redis源代碼(2)
字典與哈希表 | 自己實現Redis源代碼(3)
數據庫redisDb的基本結構如下:
客戶端與服務端的結構如下
兩者通過建立網絡連接,進行數據交互,完成通信過程。這里的網絡連接的建立是通過套接字socket建立的。
在Redis的單機應用中,一個服務端redisServer進程可以處理多個客戶端的請求。對多個客戶端的處理部分我們通過創建線程來完成。每次檢測到有一個客戶端進行連接,便為其創建一個工作線程,在其中執行客戶端與服務端的通信操作。
服務端含有一個數據庫數組,記錄保存在服務端的所有數據庫,默認數據庫數量為16。
客戶端含有一個數據庫指針,指向其當前正在使用的目標數據庫,方便其進行切換數據庫操作。
這里主要講解get/set命令的實現。
服務端結構到客戶端輸入的命令,需要進行一下操作:
如,查看幫助文檔,查看版本信息等;
如,命令為set pig 12,切割后我們可以得到["set","pig","12"],通過對關鍵字set的判斷,可以得知其為set命令。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17949.html
摘要:第一階段基礎階段基礎程序員重點把搞熟練核心是安裝配置基本操作目標能夠完成基本的系統安裝,簡單配置維護能夠做基本的簡單系統的開發能夠在中型系統中支持某個功能模塊的開發。本項不做重點學習,除非對前端有興趣。 第一階段:基礎階段(基礎PHP程序員) 重點:把LNMP搞熟練(核心是安裝配置基本操作) 目標:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的PHP開發;能夠在P...
摘要:整個項目簡單還具有實用價值,可作為的實戰項目學習的調試工具欄。查看文檔自動在個人首頁展示編程時長的工具。通過學習這些前沿的人工智能論文,提前了解在未來更多可能性可以將圖片和視頻轉換成漫畫風格的工具。興趣是最好的老師,HelloGitHub 讓你對編程感興趣!簡介HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。https://github.com/521xueweihan...
閱讀 1106·2021-11-23 09:51
閱讀 1073·2021-10-18 13:31
閱讀 2965·2021-09-22 16:06
閱讀 4255·2021-09-10 11:19
閱讀 2195·2019-08-29 17:04
閱讀 424·2019-08-29 10:55
閱讀 2471·2019-08-26 16:37
閱讀 3368·2019-08-26 13:29