V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lsk569937453
V2EX  ›  程序员

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

  •  
  •   lsk569937453 · 232 天前 · 2658 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源码

    https://github.com/lsk569937453/rcache

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

    • X 轴代表吞吐量
    • Y 轴代表 benchmark 下单线程和多线程(添加--threads 16)的测试 alt tag

    本地压测 docker-compose.yml

    用户可以本地启动 docker-compose 来进行压测。

    https://github.com/lsk569937453/rcache/blob/main/docker-compose/docker-compose.yml

    9 条回复    2024-04-15 09:59:12 +08:00
    xyj998
        1
    xyj998  
       232 天前
    已 star
    ben666
        2
    ben666  
       232 天前   ❤️ 2
    对于这种 IO 性的网络应用,很多开销是在网络协议栈里,对于一些简单的 case ,不如用 DPDK 去实现,性能更高,参考 dperf ,整机可以达到 8 千万新建每秒,吞吐 800Gbps ,几十亿并发。

    https://dperf.org/
    goodspb
        3
    goodspb  
       232 天前
    starred, 学习!
    BBCCBB
        4
    BBCCBB  
       232 天前   ❤️ 8
    既然是用 rust 实现的, 那咱们就把 redis 的第一个字母去掉, 换成 rust. 所以 repo 就叫 redis
    cfeitong
        5
    cfeitong  
       232 天前 via Android
    其实 tokio 官方的 example 里,就有个 simple-redis ,可以看眼那个实现,对比下。
    Jirajine
        6
    Jirajine  
       232 天前   ❤️ 2
    记得几年前 tokio 的官方 tour 就是实现一个简单的 redis server ,然而那个 demo 只涉及到 happy path ,过了一遍之后你觉得 async rust 挺舒服,直到想要自己实现 async trait 的时候,需要手写 poll/pin 就抓瞎了。
    0x676e67
        7
    0x676e67  
       232 天前
    nice
    codegenerator
        8
    codegenerator  
       231 天前
    你使用的是 mpsc::channel ,这就相当于一把锁,读写冲突下跟单线程当然没有优势
    多线程情况下可以采用多种方式优化读写锁冲突,缓存的读是远大于写的其实优化空间更大
    我用 rust 实现的 redis 轻松 10 倍
    lsk569937453
        9
    lsk569937453  
    OP
       220 天前
    @cfeitong 已经测试了,结果在这里 https://v2ex.com/t/1031987#reply5
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1074 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.