手写简版kedis分布式key及value服务的实现及配置

 更新时间:2022年02月28日 11:38:43   作者:kl  
这篇文章主要为大家介绍了手写简版的kedis分布式key及value服务的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

前言

今天博主主要介绍两个开源项目,然后创建应用最终实现的效果就像简版的redis服务那样,通过http的get请求,能够插入和获取数据,项目暂取名为kedis,源码后面会上传到git仓库。他们分别是Facebook开源的Rocksdb和netty实现的http容器RestExpress。通过实现这样的一个key/value系统实例来学习这两个框架的使用。

rocksdb

RocksDB是一个带key/value接口的存储引擎,其中键和值是任意字节流。它是一个C ++库。它是在Facebook基于google开源的LevelDB(https://github.com/google/LevelDB)开发的,并为LevelDB API提供向后兼容的支持。

RocksDB支持各种存储硬件,最初的重点是快速闪存。它使用日志结构化数据库引擎进行存储,完全用C ++编写,并有一个名为RocksJava的Java包装器。请参阅RocksJava基础知识。

RocksDB可以适应各种生产环境,包括纯内存,闪存,硬盘或远程存储。在RocksDB无法自动适应的情况下,提供了高度灵活的配置设置,以允许用户为其进行调整。它支持各种压缩算法和生产支持和调试的好工具。

特征

  • 专为希望在本地或远程存储系统上存储多达数TB数据的应用程序服务器而设计。
  • 优化用于在快速存储 - 闪存设备或内存中存储中小尺寸键值
  • 它适用于具有多个内核的处理器

RocksDB就是这样的一个key/value存储引擎,facebook基于RocksDB这个项目写了MyRocks,一个使用RocksDB实现的msyql数据库引擎。通过RocksDB的压缩技术相比InnoDB能够节省很大的存储空间。newsql数据库tidb组件tikv也使用了RocksDB作为底层数据存储。

RestExpress

RESTExpress是一个非常高效的小型http容器,可以在Java中创建性能非常高,可扩展的RESTful服务。使用牛逼的Netty框架编写,RESTExpress使用非阻塞I / O来处理请求,同时利用Executor来服务后端逻辑服务(可能是阻塞)操作。

实现kedis

创建服务并绑定端口

/**
 * @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();
    }
}

创建RocksDB引擎api操作类

/**
 * @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&amp;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的资料请关注脚本之家其它相关文章!

相关文章

  • 5种java排序算法汇总工具类

    5种java排序算法汇总工具类

    这篇文章主要总结了java的快速排序,希尔排序,插入排序,堆排序,归并排序五种排序算法,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Mybatis-Plus实现SQL拦截器的示例

    Mybatis-Plus实现SQL拦截器的示例

    这篇文章主要介绍了Mybatis-Plus实现一个SQL拦截器,通过使用SQL拦截器,开发人员可以在执行SQL语句之前或之后对其进行修改或记录,从而更好地控制和优化数据库操作,对Mybatis-Plus SQL拦截器相关知识感兴趣的朋友一起看看吧
    2023-05-05
  • Java算法练习题,每天进步一点点(1)

    Java算法练习题,每天进步一点点(1)

    方法下面小编就为大家带来一篇Java算法的一道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • java实现给图片加铺满的网格式文字水印

    java实现给图片加铺满的网格式文字水印

    这篇文章主要给大家介绍了关于java实现给图片加铺满的网格式文字水印的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Spring AI源码分析流式回答(最新推荐)

    Spring AI源码分析流式回答(最新推荐)

    本文我们将重点讲解流式响应的概念与实现,毕竟,AI的流式回答功能与其交互体验密切相关,是提升用户满意度的重要组成部分,我们将通过代码示例来展示这一过程,帮助您更清晰地理解如何在实际应用中进行操作,感兴趣的朋友一起看看吧
    2024-11-11
  • JAVA操作XML实例分析

    JAVA操作XML实例分析

    这篇文章主要介绍了JAVA操作XML的方法,实例分析了java操作XML文件的常用技巧,需要的朋友可以参考下
    2015-03-03
  • java中的this引用及对象构造初始化

    java中的this引用及对象构造初始化

    这篇文章主要介绍了java中的this引用及对象构造初始化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Java设计模式之java外观模式详解

    Java设计模式之java外观模式详解

    这篇文章主要介绍了Java设计模式之外观模式(Facade模式)介绍,外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,需要的朋友可以参考下
    2021-09-09
  • maven如何查看jar的pom引入来源

    maven如何查看jar的pom引入来源

    这篇文章主要介绍了maven查看jar的pom引入来源,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java中的非对称加密算法原理与实现方式

    Java中的非对称加密算法原理与实现方式

    在当今的信息时代,数据安全已经成为了一个至关重要的问题,加密技术作为保障信息安全的重要手段,受到了广泛的应用和关注,本篇文章将详细介绍Java中的非对称加密算法原理及其实现方式,需要的朋友可以参考下
    2023-12-12

最新评论