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