鉴于上次帖子,有很多同学提出想要对比一下 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 等数据结构。没想到效果出奇的好。
1
xxxccc 224 天前
没仔细了解过 mini-redis ,请教一下为啥多线程能够达到 redis 的两倍吞吐
|
2
keakon 224 天前
大概是因为 redis 是单线程的。
|
3
bug123 224 天前
cpu 占用分别是多少?一个是多线程一个是单线程
|
4
lsk569937453 OP @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 万。 |
5
bug123 224 天前
@lsk569937453 从你的数据看,redis 就是单线程呀,要不 rcache 用单线程试试?
|
6
cfeitong 212 天前 via Android
有个最简单的优化可以试试:改系统内存分配器为 mimalloc ,几行代码的效果不小。
|