今天咱也用 rust 实现一个 redis 的 demo,性能差不多。[第二弹]

254 天前
 lsk569937453

鉴于上次帖子,有很多同学提出想要对比一下 tokio 的mini-redis的性能(毕竟 tokio 在 rust 界就如高山一样让我们仰望)。我马不停蹄的开始拉镜像做对比,发现 mini-redis 在多线程下 QPS 居然是原生 redis 的两倍。我拜读了一下 mini-redis 的源码,发现流程非常之简洁。因此把 rcache 重构了一把,终于达到了 mini-redis 的水准。

源码

https://github.com/lsk569937453/rcache/tree/mutex

性能对比(4 核心 8Gb 内存)

总共做了三组对比实验:

实验结果

rcache 基于 mini-redis 的实现,性能等于 mini-redis 。相比原生的 redis ,单线程吞吐量是 redis 的 90%,多线程的吞吐量是原生的 redis 的两倍。

架构

参考 mini-redis,直接用 Mutex 对全局的数据加锁,全局的 struct 内部其实就是用多个 HashMap 来存储 string,list,hash 以及过期 map 等数据结构。没想到效果出奇的好。

2128 次点击
所在节点    程序员
6 条回复
xxxccc
254 天前
没仔细了解过 mini-redis ,请教一下为啥多线程能够达到 redis 的两倍吞吐
keakon
254 天前
大概是因为 redis 是单线程的。
bug123
254 天前
cpu 占用分别是多少?一个是多线程一个是单线程
lsk569937453
254 天前
@bug123 rcache 和 redis 的机器配置都是 4 核 8G 。
实验中 redis-benchmark 的请求数是 10 万,16 线程。
当请求数为 10 万,线程数为 16 时,rcache 的 cpu 使用率 115%,吞吐量为 20 万。redis 的使用率为 70%,吞吐量 10 万。
当请求数为 100 万,线程数为 16 时,rcache 的 cpu 使用率 380%,吞吐量为 33 万。redis 的使用率为 100%,吞吐量 11 万。
bug123
254 天前
@lsk569937453 从你的数据看,redis 就是单线程呀,要不 rcache 用单线程试试?
cfeitong
242 天前
有个最简单的优化可以试试:改系统内存分配器为 mimalloc ,几行代码的效果不小。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1031987

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX