<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          來(lái),手?jǐn)]一個(gè)簡(jiǎn)版 Redis

          共 3711字,需瀏覽 8分鐘

           ·

          2020-09-02 06:07

          點(diǎn)擊上方藍(lán)色“小哈學(xué)Java”,選擇“設(shè)為星標(biāo)

          回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

          來(lái)源 | my.oschina.net/keking/blog/3037372

          • rocksdb
          • RestExpress
          • 實(shí)現(xiàn)kedis
          • 結(jié)語(yǔ)

          今天主要介紹兩個(gè)開(kāi)源項(xiàng)目,然后創(chuàng)建應(yīng)用最終實(shí)現(xiàn)的效果就像簡(jiǎn)版的redis服務(wù)那樣,通過(guò)http的get請(qǐng)求,能夠插入和獲取數(shù)據(jù),項(xiàng)目暫取名為kedis,源碼后面會(huì)上傳到git倉(cāng)庫(kù)。他們分別是Facebook開(kāi)源的Rocksdb和netty實(shí)現(xiàn)的http容器RestExpress。通過(guò)實(shí)現(xiàn)這樣的一個(gè)key/value系統(tǒng)實(shí)例來(lái)學(xué)習(xí)這兩個(gè)框架的使用。

          rocksdb

          項(xiàng)目地址:https://github.com/facebook/rocksdb

          RocksDB是一個(gè)帶key/value接口的存儲(chǔ)引擎,其中鍵和值是任意字節(jié)流。它是一個(gè)C ++庫(kù)。它是在Facebook基于google開(kāi)源的LevelDB(https://github.com/google/LevelDB)開(kāi)發(fā)的,并為L(zhǎng)evelDB API提供向后兼容的支持。

          RocksDB支持各種存儲(chǔ)硬件,最初的重點(diǎn)是快速閃存。它使用日志結(jié)構(gòu)化數(shù)據(jù)庫(kù)引擎進(jìn)行存儲(chǔ),完全用C ++編寫(xiě),并有一個(gè)名為RocksJava的Java包裝器。

          RocksDB可以適應(yīng)各種生產(chǎn)環(huán)境,包括純內(nèi)存,閃存,硬盤(pán)或遠(yuǎn)程存儲(chǔ)。在RocksDB無(wú)法自動(dòng)適應(yīng)的情況下,提供了高度靈活的配置設(shè)置,以允許用戶(hù)為其進(jìn)行調(diào)整。它支持各種壓縮算法和生產(chǎn)支持和調(diào)試的好工具。

          特征

          • 專(zhuān)為希望在本地或遠(yuǎn)程存儲(chǔ)系統(tǒng)上存儲(chǔ)多達(dá)數(shù)TB數(shù)據(jù)的應(yīng)用程序服務(wù)器而設(shè)計(jì)。
          • 優(yōu)化用于在快速存儲(chǔ) - 閃存設(shè)備或內(nèi)存中存儲(chǔ)中小尺寸鍵值
          • 它適用于具有多個(gè)內(nèi)核的處理器

          RocksDB就是這樣的一個(gè)key/value存儲(chǔ)引擎,facebook基于RocksDB這個(gè)項(xiàng)目寫(xiě)了MyRocks,一個(gè)使用RocksDB實(shí)現(xiàn)的msyql數(shù)據(jù)庫(kù)引擎。通過(guò)RocksDB的壓縮技術(shù)相比InnoDB能夠節(jié)省很大的存儲(chǔ)空間。newsql數(shù)據(jù)庫(kù)tidb組件tikv也使用了RocksDB作為底層數(shù)據(jù)存儲(chǔ)。

          RestExpress

          項(xiàng)目地址:https://github.com/RestExpress/RestExpress

          RESTExpress是一個(gè)非常高效的小型http容器,可以在Java中創(chuàng)建性能非常高,可擴(kuò)展的RESTful服務(wù)。使用牛逼的Netty框架編寫(xiě),RESTExpress使用非阻塞I / O來(lái)處理請(qǐng)求,同時(shí)利用Executor來(lái)服務(wù)后端邏輯服務(wù)(可能是阻塞)操作。


          實(shí)現(xiàn)kedis

          創(chuàng)建服務(wù)并綁定端口

          /**
          ?*?@author:?kl?@kailing.pub
          ?*?@date:?2019/4/12
          ?*/

          public?class?Main?{

          ????public?static?void?main(String[]?args)?{
          ????????Configs?configs?=?new?Configs();
          ????????configs.fromArgs(args);
          ????????RestExpress?server?=?new?RestExpress()
          ????????????????.setName("kedis-server")
          ????????????????.setBaseUrl("http://localhost:"?+configs.getPort());
          ????????KedisCore?core?=new?KedisCore(configs.getDbPath());
          ????????Routes.define(server,core);
          ????????server.bind(configs.getPort());
          ????????server.awaitShutdown();
          ????}
          }

          創(chuàng)建RocksDB引擎api操作類(lèi)

          /**
          ?*?@author:?kl?@kailing.pub
          ?*?@date:?2019/4/12
          ?*/

          public?class?KedisCore?{

          ????private?RocksDB?db;

          ????public?KedisCore(String?path)?{
          ????????RocksDB.loadLibrary();
          ????????try?{
          ????????????final?Options?options?=?new?Options().setCreateIfMissing(true);
          ????????????this.db?=?RocksDB.open(options,?path);
          ????????}?catch?(RocksDBException?ex)?{
          ????????????ex.printStackTrace();
          ????????}
          ????}

          ????public?String?put(Request?request,?Response?response)?throws?Exception?{
          ????????Map?map?=?request.getQueryStringMap();
          ????????String?key?=?map.get("key");
          ????????String?value?=?map.get("value");
          ????????db.put(key.getBytes(),?value.getBytes());
          ????????return?"ok";
          ????}

          ????public?String?get(Request?request,?Response?response)?throws?Exception?{
          ????????Map?map?=?request.getQueryStringMap();
          ????????String?key?=?map.get("key");
          ????????byte[]?values?=?db.get(key.getBytes());
          ????????if(values?!=?null){
          ????????????return?new?String(values,"utf-8");
          ????????}else?{
          ???????????return?null;
          ????????}
          ????}
          }

          設(shè)置請(qǐng)求路由

          /**
          ?*?@author:?kl?@kailing.pub
          ?*?@date:?2019/4/12
          ?*/

          public?abstract?class?Routes?{
          ???public?static?void?define(RestExpress?server,KedisCore?core){
          ???????server.uri("/put",?core).action("put",?HttpMethod.GET).noSerialization();
          ???????server.uri("/get",?core).action("get",?HttpMethod.GET).noSerialization();
          ???}
          }

          代碼地址:https://gitee.com/kailing/kedis

          mvn install打包后,進(jìn)入target目錄會(huì)有kedis-1.0.jar。CMD下分別執(zhí)行如下腳本啟動(dòng)驗(yàn)證

          啟動(dòng)

          java?-jar?kedis-1.0.jar?--port?8081

          插入數(shù)據(jù)

          curl?http://localhost:8081/put?key=name&value=ckl

          獲取數(shù)據(jù)

          curl?http://localhost:8081/get?key=name

          結(jié)語(yǔ)

          RocksDB和RestExpress這兩個(gè)項(xiàng)目都很有特點(diǎn),RocksDB作為嵌入式的微存儲(chǔ)引擎java包裝器的大小僅有10M左右,主要是C++編譯后的dll和so文件,其本身功能非常強(qiáng)大,強(qiáng)大到可以作為mysql的底層存儲(chǔ)引擎,對(duì)底層存儲(chǔ)做了很多的優(yōu)化。RestExpress雖很輕量但五臟俱全,非常適合一些小工具暴露http的服務(wù)。

          END


          有熱門(mén)推薦?

          1.?fastjson 的作者,在阿里內(nèi)網(wǎng)挨罵了?!

          2.?2w字 + 40張圖帶你參透并發(fā)編程!

          3.?因用了Insert into select語(yǔ)句,美女同事被開(kāi)除了!

          4.?查詢(xún)速度提升200倍,ClickHouse到底有多快?

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99re在| 丁香五月天导航 | AV大奶网 | 骚逼影院′ | 五月天成人在线视频免费播放 |