基于Java NIO的簡單NoSQL

學(xué)了不短時(shí)間的java,有點(diǎn)零散,準(zhǔn)備串聯(lián)起知識(shí),決定寫一個(gè)綜合的程序來鍛煉鍛煉,于是花了幾天做了一個(gè)簡單的NoSQL,采用Java NIO和反射技術(shù),當(dāng)然還有很多不足,多多包涵,歡迎指正。

服務(wù)器短主要采用Java NIO selector進(jìn)行多路復(fù)用,提高系統(tǒng)并發(fā)量,連接事件就保存鏈接,注冊事件;可讀事件則只是將消息封裝成對(duì)象,壓入阻塞消息隊(duì)列,不做處理,由單獨(dú)的線程進(jìn)行處理分發(fā),提高主線程的響應(yīng)速度。本來想用多線程提高處理速度,但所有的數(shù)據(jù)操作都是全局共享的,則必須保證操作順序,多線程沒有意義,因此只得采用單線程。不知道有沒有更好的方法,這里還對(duì)消息對(duì)象進(jìn)行了一定數(shù)目的緩存,超過數(shù)目就直接丟棄,避免每次new 新的。

傳遞的數(shù)據(jù)是一個(gè)字符串,開頭是操作指令如Push,SET等,這是通過框架初次讀取配置文件config.xml決定的,可根據(jù)需求自由設(shè)置<自定義指令>類名.方法名,運(yùn)行時(shí)利用Java 反射動(dòng)態(tài)加載,調(diào)用方法,傳入操作的字符串,高度自由。

這也是我最喜歡反射的地方,由字符串參數(shù)直接獲得對(duì)象和調(diào)用方法,無需做if-else的判斷和硬編碼。我以前寫php程序的時(shí)候,最喜歡的一招就是通過參數(shù)字符串new $str()或者$str()直接調(diào)用方法,而無需做復(fù)雜的邏輯判斷(不要在黑我大php了,通過字符串映射到對(duì)象和方法整的很爽好嗎?已經(jīng)多年沒寫過臃腫的if-else 和switch-case了)PS:java 的API真他媽難用,坑爹的IO,上來啥也不干先捕獲一堆異常,Oracle的文檔直接被http://php.net 吊打。

具體的存儲(chǔ)我就偷懶直接采用了Java的集合做靜態(tài)成員,載入類時(shí)初始化。其實(shí)很粗糙,大神請(qǐng)忽略。Github地址 https://github.com/dingdangmao123/javaredis? GitHub 新手 不要見笑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,793評(píng)論 11 349
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評(píng)論 25 709
  • 第十五章 :哈雷得和全新的開始(未讀完) 哈雷得遇見瑪?shù)倌戎?,開始在旅途中更注意保護(hù)自己得身體,和更專業(yè)的去看待...
    周lynn閱讀 176評(píng)論 0 0
  • 我對(duì)數(shù)字非常不敏感,雖然我數(shù)學(xué)成績還是不賴的,家里的財(cái)政大權(quán)自然也不可能是歸我管了,而且很不好意思的說,家里有多少...
    小呆呆閱讀 290評(píng)論 0 1
  • 聽了朋友的一席話才知道,天底下,真有愛玩之人。 在我看來,在感情世界里,所謂愛玩的人,必定是有一些資本的,這...
    Manfanlili閱讀 184評(píng)論 0 0

友情鏈接更多精彩內(nèi)容