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

2017-12-30 10:49:35 +08:00
 wvtjplh
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);
3132 次点击
所在节点    问与答
12 条回复
oott123
2017-12-30 11:10:26 +08:00
就算不存在网络传输耗时,也可能会有协议栈耗时或者编码解码序列化的耗时等,毕竟 redis 是跨进程通信,相比起进程内的内存缓存读写自然是有更多开销。
dangyuluo
2017-12-30 11:12:10 +08:00
你是怎么连接 redis 的?用的 socket 还是 localhost ?
hcymk2
2017-12-30 11:28:59 +08:00
你应该和 redis 自带的 benchmark 来比较
Citrus
2017-12-30 11:33:24 +08:00
差距不大才不对吧。。。你这平均一下一次 redis 操作连 1ms 都不到,还要怎样?
xhystc
2017-12-30 12:03:03 +08:00
用 pipe 了么
wvtjplh
2017-12-30 12:36:37 +08:00
@dangyuluo localhost
wvtjplh
2017-12-30 12:49:23 +08:00
@xhystc 没有
chinvo
2017-12-30 12:54:31 +08:00
歪个楼,做 Benchmark 用 BenchmarkDotNet 贼爽
wwqgtxx
2017-12-30 14:05:51 +08:00
编码解码,协议封装,进程上下文切换,内核态和用户态数据拷贝 这些不都是要时间的嘛
mooncakejs
2017-12-30 16:04:32 +08:00
你用的是 linux sock ?
windows 不太了解,如果没有特殊操作,tcp 协议栈过一遍就已经很慢了。
ipwx
2017-12-30 16:13:22 +08:00
。。。建议复习操作系统。进程隔离是操作系统保障安全性的基本方式,而这种隔离带来了跨进程通讯的开销。
iyaozhen
2017-12-30 17:10:28 +08:00
本来就是这样呀

各有各的场景,内置 cache 性能是好,但是分布式系统间数据更新怎么办?一般场景一次请求也就操作几次 redis 和用户内置 cache 即使就差个几 ms 也是可以接受的

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

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

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

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

© 2021 V2EX