V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wvtjplh
V2EX  ›  问与答

c#中 redis 和内置的 Cache 性能对比为什么差距这么大?

  •  
  •   wvtjplh · 2017-12-30 10:49:35 +08:00 · 3278 次点击
    这是一个创建于 2504 天前的主题,其中的信息可能已经有所发展或是发生改变。
    redis 10 万次耗时 00:00:03.9114159
    Cache 10 万次耗时 00:00:00.1691259

    redis 服务也是在本机运行不存在网络传输

    代码
    for (int i = 0; i < 100000; i++)
    {
    service.Set("RedisStringService_key" + i, "RedisStringService_value2");//Redis
    }
    watch.Stop();
    Console.WriteLine("redis 10 万次耗时 "+watch.Elapsed);

    watch.Reset();
    watch.Start();
    for (int i = 0; i < 100000; i++)
    {
    HttpRuntime.Cache.Insert("RedisStringService_key" + i, "RedisStringService_value2", null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
    }
    watch.Stop();
    Console.WriteLine("Cache 10 万次耗时 " + watch.Elapsed);
    12 条回复    2017-12-30 17:10:28 +08:00
    oott123
        1
    oott123  
       2017-12-30 11:10:26 +08:00 via Android   ❤️ 1
    就算不存在网络传输耗时,也可能会有协议栈耗时或者编码解码序列化的耗时等,毕竟 redis 是跨进程通信,相比起进程内的内存缓存读写自然是有更多开销。
    dangyuluo
        2
    dangyuluo  
       2017-12-30 11:12:10 +08:00
    你是怎么连接 redis 的?用的 socket 还是 localhost ?
    hcymk2
        3
    hcymk2  
       2017-12-30 11:28:59 +08:00
    你应该和 redis 自带的 benchmark 来比较
    Citrus
        4
    Citrus  
       2017-12-30 11:33:24 +08:00 via iPhone
    差距不大才不对吧。。。你这平均一下一次 redis 操作连 1ms 都不到,还要怎样?
    xhystc
        5
    xhystc  
       2017-12-30 12:03:03 +08:00 via Android
    用 pipe 了么
    wvtjplh
        6
    wvtjplh  
    OP
       2017-12-30 12:36:37 +08:00
    @dangyuluo localhost
    wvtjplh
        7
    wvtjplh  
    OP
       2017-12-30 12:49:23 +08:00
    @xhystc 没有
    chinvo
        8
    chinvo  
       2017-12-30 12:54:31 +08:00
    歪个楼,做 Benchmark 用 BenchmarkDotNet 贼爽
    wwqgtxx
        9
    wwqgtxx  
       2017-12-30 14:05:51 +08:00
    编码解码,协议封装,进程上下文切换,内核态和用户态数据拷贝 这些不都是要时间的嘛
    mooncakejs
        10
    mooncakejs  
       2017-12-30 16:04:32 +08:00
    你用的是 linux sock ?
    windows 不太了解,如果没有特殊操作,tcp 协议栈过一遍就已经很慢了。
    ipwx
        11
    ipwx  
       2017-12-30 16:13:22 +08:00
    。。。建议复习操作系统。进程隔离是操作系统保障安全性的基本方式,而这种隔离带来了跨进程通讯的开销。
    iyaozhen
        12
    iyaozhen  
       2017-12-30 17:10:28 +08:00
    本来就是这样呀

    各有各的场景,内置 cache 性能是好,但是分布式系统间数据更新怎么办?一般场景一次请求也就操作几次 redis 和用户内置 cache 即使就差个几 ms 也是可以接受的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1379 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.