.Net的Cache和Memcached有什么优缺点?

2025-04-13 07:10:32
推荐回答(1个)
回答1:

如果你的服务器只有一台,且数据库读写压力不大,就没必要使用Memcached。HttpRuntime.Cache是本地缓存,Memcached是分布式缓存,两者的区别在于:

本地缓存
本地缓存可能是大家用的最多的一种缓存方式了,不管是本地内存还是磁盘,其速度快,成本低,在有些场合非常有效。
但是对于web系统的集群负载均衡结构来说,本地缓存使用起来就比较受限制,因为当数据库数据发生变化时,你没有一个简单有效的方法去更新本地缓存;然而,你如果在不同的服务器之间去同步本地缓存信息,由于缓存的低时效性和高访问量的影响,其成本和性能恐怕都是难以接受的。

分布式缓存
前面提到过,本地缓存的使用很容易让你的应用服务器带上“状态”,这种情况下,数据同步的开销09会比较大;尤其是在集群环境中更是如此!
分布式缓存这种东西存在的目的就是为了提供比RDB更高的TPS和扩展性,同时有帮你承担了数据同步的痛苦;优秀的分布式缓存系统有大家所熟知的Memcached、Redis(当然也许你把它看成是NoSQL,但是我个人更愿意把分布式缓存也看成是NoSQL),还有淘宝自主开发的Tair等。
对比关系型数据库和缓存存储,其在读和写性能上的差距可谓天壤之别;就拿淘宝的Tair来说,mdb引擎的单机QPS已在10w以上,ldb的也达到了5w~7w,而集群的性能会更高(目前uic所用的Tair集群QPS高达数十万!)。
所以,在技术和业务都可以接受的情况下,我们可以尽量把读写压力从数据库转移到缓存上,以保护看似强大,其实却很脆弱的关系型数据库。