2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【国产开源】兼容redis协议的内存数据库

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

时间:2021-12-14 11:17:07

相关推荐

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

背景

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

编写目的

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

协议特征

兼容redis原生协议

set getlpush rpush lrange blpop brpop llenhset hget hgetall hscanpub subselect keys scan expire delmulti exec discardincr incrbyflushdbslaveof....

支持db分区隔离(select)支持事务机制(multi、exec、discard)支持阻塞队列(blpop、brpop)支持发布订阅

内存消耗

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

数据持久

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

系统概述

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

核心类图

基准测试

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

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

存储设计

jredis文件结构

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

db文件内容

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

内存&存储设计

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

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

buffer设计

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

单节点配置

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

高可用-主从配置

只需要加入如下配置项

主配置

replication.mode=master

从配置

replication.mode=slaveslaver.of=127.0.0.1:16379

项目地址:

/3kuai/jredis

/lmx_007/jredis

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。