<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天博主主要介紹兩個開源專案,然後建立應用最終實現的效果就像簡版的redis服務那樣,通過http的get請求,能夠插入和獲取資料,專案暫取名為kedis,原始碼後面會上傳到git倉庫。他們分別是Facebook開源的Rocksdb和netty實現的http容器RestExpress。通過實現這樣的一個key/value系統範例來學習這兩個框架的使用。
RocksDB是一個帶key/value介面的儲存引擎,其中鍵和值是任意位元組流。它是一個C ++庫。它是在Facebook基於google開源的LevelDB(https://github.com/google/LevelDB)開發的,併為LevelDB API提供向後相容的支援。
RocksDB支援各種儲存硬體,最初的重點是快速快閃記憶體。它使用紀錄檔結構化資料庫引擎進行儲存,完全用C ++編寫,並有一個名為RocksJava的Java包裝器。請參閱RocksJava基礎知識。
RocksDB可以適應各種生產環境,包括純記憶體,快閃記憶體,硬碟或遠端儲存。在RocksDB無法自動適應的情況下,提供了高度靈活的設定設定,以允許使用者為其進行調整。它支援各種壓縮演演算法和生產支援和偵錯的好工具。
RocksDB就是這樣的一個key/value儲存引擎,facebook基於RocksDB這個專案寫了MyRocks,一個使用RocksDB實現的msyql資料庫引擎。通過RocksDB的壓縮技術相比InnoDB能夠節省很大的儲存空間。newsql資料庫tidb元件tikv也使用了RocksDB作為底層資料儲存。
RESTExpress是一個非常高效的小型http容器,可以在Java中建立效能非常高,可延伸的RESTful服務。使用牛逼的Netty框架編寫,RESTExpress使用非阻塞I / O來處理請求,同時利用Executor來服務後端邏輯服務(可能是阻塞)操作。
/** * @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(); } }
/** * @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<String, String> 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<String, String> 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; } } }
/** * @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(); } }
mvn install打包後,進入target目錄會有kedis-1.0.jar。CMD下分別執行如下指令碼啟動驗證
java -jar kedis-1.0.jar --port 8081
curl http://localhost:8081/put?key=name&value=ckl
curl http://localhost:8081/get?key=name
RocksDB和RestExpress這兩個專案都很有特點,RocksDB作為嵌入式的微儲存引擎java包裝器的大小僅有10M左右,主要是C++編譯後的dll和so檔案,其本身功能非常強大,強大到可以作為mysql的底層儲存引擎,對底層儲存做了很多的優化,可以見wiki。RestExpress雖很輕量但五臟俱全,非常適合一些小工具暴露http的服務。
以上就是手寫簡版key及value服務kedis的詳細內容,更多關於手寫key及value服務kedis的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45