码迷,mamicode.com
首页 > 编程语言 > 详细

java重写redis服务端

时间:2019-01-12 19:55:39      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:images   自动   兼容   rip   高级特性   java客户端   阻塞   值类型   线性   

背景

最近研究了下redis的协议、持久化策略以及单线程模型,突然觉得和java很搭配。源码请用力戳这里

目的

鉴于redis是c编写,java的同学读起来比较费力,所以写java版。让更多的开发者理解高性能设计的精髓,同时加深底层传输,存储,索引的认知。

特征

1. 兼容大多数redis原生协议
2. 兼容redis桌面客户端0.9+
3. db分区隔离和事务机制
4. 高级特性:如阻塞队列,发布订阅
5. 数据持久采用jdk原生MappedByteBuffer同步刷盘(虚拟内存技术)
6. key,value存储隔离,仅key空间占虚拟机内存,而value只在使用时才加载,所以优于redis
7. 兼容jedis,spring-data-redis,spring-boot-data等常用redis java客户端工具

基准测试

单机(4核8g),1000连接,随机value set,tps大致在3W+
参考下图,16379为jredis,7003为redis
技术分享图片
技术分享图片

存储设计

jredis文件结构

默认8个分区,相当于8个db,数据在程序运行时同步写入,重启会自动读取恢复数据到内存。
技术分享图片

db文件内容

分为一个key区+三个value类型区,对应磁盘文件结构为:
技术分享图片

文件详细介绍

key区加载所有值类型的key
value区仅加载同类型的值
技术分享图片

缓冲区设计

线性存储,自定义消息格式,消息定长,一个单元最大存储1024字节,文件写满暂不支持动态扩容。
技术分享图片

java重写redis服务端

标签:images   自动   兼容   rip   高级特性   java客户端   阻塞   值类型   线性   

原文地址:http://blog.51cto.com/14171137/2341997

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!