owlcache  - 无中心分布式的K/V内存缓存

小码哥 2019-08-17 14:44:56

owlcache 是一款由Go编写的轻量级、高性能、无中心分布式的Key/Value内存缓存型的数据共享应用(一定场景下可以作为轻量型数据库来使用)。

亮点与功能简述

  • ?跨平台运行
  • ?单机超高性能
  • ⛓无中心分布式
  • ?数据并发安全
  • ?支持数据过期
  • ?数据落地存储
  • ?使用简单,操作命令只有几个
  • ⚔️身份认证
  • ?日志记录
  • ?同时支持TCP、HTTP/HTTPS两种方式连接

设计初衷

我最早的想法就是实现一个数据共享应用,它可以非常轻松的构建一个高效的数据共享集群。在集群中的数据,它们可以是共同拥有的,也可以是一个节点拥有其它节点随时来获取。集群里面的所有数据首先要是可“共享”的、可“查阅”的数据。

猫头鹰机灵又可爱。它们脑袋的活动范围为270°。

Image text

使用文档

简单使用示例

单节点获取Key值

  • TCP 命令: get <key>
get hello
  • HTTP 注意:HTTP获取数据不用密码验证,只有其他更改数据的操作需要验证身份。
请求参数 参数值
cmd get
key key名称
http://127.0.0.1:7721/data/?cmd=get&key=hello

 

响应结果例子:

{
    "Cmd": "get",
    "Status": 200,
    "Results": "SUCCESS",
    "Key": "hello",
    "Data": "world",
    "ResponseHost": "127.0.0.1:7721",
    "KeyCreateTime": "2019-04-24T18:05:10.9132377+08:00"
}

集群获取Key值(GroupWorkMode设置为owlcache)

  • 假设现在有三个owlcache服务:127.0.0.1:7721、127.0.0.1:7723、127.0.0.1:7725。每个服务中都有一个Key名称叫hello的数据。
请求参数 参数值
cmd get
key key名称
http://127.0.0.1:7721/group_data/?cmd=get&key=hello

 

响应结果例子:

{
    "Cmd": "get",
    "Status": 200,
    "Results": "SUCCESS",
    "Key": "hello",
    "Data": [
        {
            "Address": "127.0.0.1:7723",
            "Data": "world7723",
            "KeyCreateTime": "2019-04-10T13:43:01.6576413+08:00",
            "Status": 200
        },
        {
            "Address": "127.0.0.1:7721",
            "Data": "world7721",
            "KeyCreateTime": "2019-04-09T17:50:59.458104+08:00",
            "Status": 200
        },
        {
            "Address": "127.0.0.1:7725",
            "Data": "world7725",
            "KeyCreateTime": "2019-04-08T14:32:20.6934487+08:00",
            "Status": 200
        }
    ],
    "ResponseHost": "127.0.0.1:7721",
    "KeyCreateTime": "0001-01-01T00:00:00Z"
}

每个节点数据都是独立的,集群中重复Key的数据不会被删除(owlcache默认的集群方式),查询时会得到一个根据时间排序的数据列表,最新数据优先展示。

......更多请参阅文档的详细说明

    公告

    《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

    课程地址:https://www.shiyanlou.com/courses/1436
    9折优惠邀请码: ZHwfIjb1

    该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。