各位老铁们,大家好,今天由我来为大家分享取名网站系统源码分享,以及取名网站推荐的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
今天主要介绍两个开源项目,然后创建应用最终实现的效果就像简版的redis服务那样,通过http的get请求,能够插入和获取数据,项目暂取名为kedis,源码后面会上传到git仓库。他们分别是Facebook开源的Rocksdb和netty实现的http容器RestExpress。通过实现这样的一个key/value系统实例来学习这两个框架的使用。
rocksdb
项目地址:https://github.com/facebook/rocksdb
RocksDB是一个带key/value接口的存储引擎,其中键和值是任意字节流。它是一个C++库。它是在Facebook基于google开源的LevelDB(https://github.com/google/LevelDB)开发的,并为LevelDBAPI提供向后兼容的支持。
RocksDB支持各种存储硬件,最初的重点是快速闪存。它使用日志结构化数据库引擎进行存储,完全用C++编写,并有一个名为RocksJava的Java包装器。
RocksDB可以适应各种生产环境,包括纯内存,闪存,硬盘或远程存储。在RocksDB无法自动适应的情况下,提供了高度灵活的配置设置,以允许用户为其进行调整。它支持各种压缩算法和生产支持和调试的好工具。
特征
专为希望在本地或远程存储系统上存储多达数TB数据的应用程序服务器而设计。
优化用于在快速存储-闪存设备或内存中存储中小尺寸键值
它适用于具有多个内核的处理器
RocksDB就是这样的一个key/value存储引擎,facebook基于RocksDB这个项目写了MyRocks,一个使用RocksDB实现的msyql数据库引擎。通过RocksDB的压缩技术相比InnoDB能够节省很大的存储空间。newsql数据库tidb组件tikv也使用了RocksDB作为底层数据存储。
RestExpress9
项目地址:https://github.com/RestExpress/RestExpress
RESTExpress是一个非常高效的小型http容器,可以在Java中创建性能非常高,可扩展的RESTful服务。使用牛逼的Netty框架编写,RESTExpress使用非阻塞I/O来处理请求,同时利用Executor来服务后端逻辑服务(可能是阻塞)操作。
实现kedis
创建服务并绑定端口
/**
*@date:2019/4/12
*/
publicclassMain{
publicstaticvoidmain(String[]args){
Configsconfigs=newConfigs;
configs.fromArgs(args);
RestExpressserver=newRestExpress
.setName(“kedis-server”)
.setBaseUrl(“http://localhost:”+configs.getPort);
KedisCorecore=newKedisCore(configs.getDbPath);
Routes.define(server,core);
server.bind(configs.getPort);
server.awaitShutdown;
}
}
创建RocksDB引擎api操作类
/**
*@date:2019/4/12
*/
publicclassKedisCore{
privateRocksDBdb;
publicKedisCore(Stringpath){
RocksDB.loadLibrary;
try{
finalOptionsoptions=newOptions.setCreateIfMissing(true);
this.db=RocksDB.open(options,path);
}catch(RocksDBExceptionex){
ex.printStackTrace;
}
}
publicStringput(Requestrequest,Responseresponse)throwsException{
Map<String,String>map=request.getQueryStringMap;
Stringkey=map.get(“key”);
Stringvalue=map.get(“value”);
db.put(key.getBytes,value.getBytes);
return”ok”;
}
publicStringget(Requestrequest,Responseresponse)throwsException{
Map<String,String>map=request.getQueryStringMap;
Stringkey=map.get(“key”);
bytevalues=db.get(key.getBytes);
if(values!=){
returnnewString(values,”utf-8″);
}else{
return;
}
}
}
设置请求路由
/**
*@date:2019/4/12
*/
publicabstractclassRoutes{
publicstaticvoiddefine(RestExpressserver,KedisCorecore){
server.uri(“/put”,core).action(“put”,HttpMethod.GET).noSerialization;
server.uri(“/get”,core).action(“get”,HttpMethod.GET).noSerialization;
}
}
代码地址:https://gitee.com/kailing/kedis
mvninstall打包后,进入target目录会有kedis-1.0.jar。CMD下分别执行如下脚本启动验证
启动
java-jarkedis-1.0.jar–port8081
插入数据
curlhttp://localhost:8081/put?key=name&value=ckl
获取数据
curlhttp://localhost:8081/get?key=name
结语
RocksDB和RestExpress这两个项目都很有特点,RocksDB作为嵌入式的微存储引擎java包装器的大小仅有10M左右,主要是C++编译后的dll和so文件,其本身功能非常强大,强大到可以作为mysql的底层存储引擎,对底层存储做了很多的优化。RestExpress虽很轻量但五脏俱全,非常适合一些小工具暴露http的服务。
————end————
OK,本文到此结束,希望对大家有所帮助。
