【国产开源】兼容redis协议的内存数据库

背景

jredis是一个高性能、高可用、低延迟的内存数据库,服务端源码请移步这里

编写目的

加深对底层网络传输,文件存储,文件索引的认知,同时也巩固自身的知识点。

协议特征

format,png

  • 兼容redis原生协议
set get
lpush rpush lrange blpop brpop llen
hset hget hgetall hscan
pub sub
select keys scan expire del
multi exec discard
incr incrby
flushdb
slaveof
....
  • 支持db分区隔离(select)
  • 支持事务机制(multi、exec、discard)
  • 支持阻塞队列(blpop、brpop)
  • 支持发布订阅

内存消耗

仅key和索引占用JVM堆内存,value则存储在堆外内存上

数据持久

  • mmap技术,对比Redis的RDB和AOF更有优势,尽可能的保证数据不丢失(除非掉电或宕机),因为数据同步写入在page-cache,而它只受os的调度。
  • 动态扩容

系统概述

以netty为网络框架,解析和编码redis协议,并对相关操作进行持久。

format,png

核心类图

format,png

format,png

基准测试

单机(4核8g),1000连接,随机value set,tps大致在3W+

参考下图,16379为java手撸的jredis,7003为redis

aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk2MjQxOTctZWJjZDI1YWU5ZDkwOWMzYy5qcGc_aW1hZ2VNb2dyMi9hdXRvLW9yaWVudC9zdHJpcCU3Q2ltYWdlVmlldzIvMi93LzEyNDA

aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzk2MjQxOTctMDUzYTYyNzA5M2I1YWFkMy5qcGc_aW1hZ2VNb2dyMi9hdXRvLW9yaWVudC9zdHJpcCU3Q2ltYWdlVmlldzIvMi93LzEyNDA

存储设计

jredis文件结构

默认8个分区,相当于8个逻辑DB,数据在程序运行时同步写入,重启自动恢复数据到内存。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xteDE5ODkyMTk=,size_16,color_FFFFFF,t_70

db文件内容

分为一个index(key)区+三个value(data)类型区,对应磁盘文件结构为:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xteDE5ODkyMTk=,size_16,color_FFFFFF,t_70

内存&存储设计

内存区:存储key和对应的value值索引

映射区/磁盘区:存储key和value

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xteDE5ODkyMTk=,size_16,color_FFFFFF,t_70

buffer设计

线性存储,消息定长,一个单元默认最大存储1024字节,支持配置。

20171221185407993

单节点配置

#服务地址
server.host=127.0.0.1
#服务端口
server.port=16379
#内存大小
memorySize=32
#db数量
dbSize=8
logging.level.root=error

高可用-主从配置

只需要加入如下配置项

主配置

replication.mode=master

从配置

replication.mode=slave
slaver.of=127.0.0.1:16379

项目地址:

https://github.com/3kuai/jredis

https://gitee.com/lmx_007/jredis

欢迎更多伙伴们一起来建议和完善它

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值