现在公司的系统,有将很多的数据都保存到一个缓存系统中(ShareCache),方便其它系统读取数据,其中读写是很频繁的,现在的ShareCache跑几天就很占内存,数据一般只有几十M,但是ShareCache会占用到几个G,在占用内存到4G的时候服务就停止了,现在想换其他的缓存系统,以前有接触过memcached,了解不是很深,这个分布式缓存很强大,想咨询一下大家,像这样的业务一般在C#中使用哪种类型的缓存比较合适!!!
------解决思路----------------------
读写很频繁?那为什么要用缓存?直接数据库操作不就可以了?
如果有多个系统要用,那也可以做成服务
------解决思路----------------------
很多人把 memorycached 叫做“缓存”,其实这是一个很不好的名词儿。它其实就是一个傻瓜式的内存k-v数据表,它并就没有什么缓存系统应有的策略功能。
那些滥用内存的大公司,至少为每一个业务模块都单独找2台服务器、每台都配64G或者128G内存,然后程序员自己去用这个当作k-v三列表,用它当作关系数据库(例如mysql)前面的“缓冲”,原因就是关系数据库系统的并发select(而不是insert和update)效率实在是太低了。
这种结构,中小公司根本不应该学(因为你不可能随时掏50万加服务器、也不可能养20个程序员没事儿就去研究各种开源的新“系统”)。小项目,你应该使用“基于wiredTiger的 mongodb”这类成熟的、查询速度很快的数据库,由数据库系统去平衡缓存问题。
其实互联网公司最好混了,只要会到处“求代码、下载开源代码”就行了。你自己设计一套系统,反而招来许多一轮。所以最好的方式就是把自己的公司当作创业公司一样去考虑技术架构,不要学别的互联网公司那种烧钱搞技术的做法。
------解决思路----------------------
对于 .net 系统来说,在框架中有标准的 Cache 机制。它可以自动管理缓存单元的缓存依赖,不但可以在物理内存即将不足时自动清理垃圾数据,而且可以根据你的业务需要(例如根据数据库表变动、文件变动、其它缓存单元变动、预定时间等等各种条件)自动清理缓存。不会影响应用程序运行。
如果没钱学大公司随时堆叠多个(专用)缓存服务器,那么我建议就不要滥用有问题的小的开源缓存系统软件。先把 .net 系统的在你的程序中内置的缓存功能用好。
另外,缓存应该是在每一个进程自己管理的,不用跑到网络服务器上去查询什么缓存。缓存不应该跑到数据库前面去。像大公司,那是内部吵吵得厉害,所以习惯于在每一个环节都用钱来解决问题,所以有一些独立的内存数据库内当作“缓存系统”。而这就掩盖了每一个服务器上跑的应用程序自身没有“嵌入缓存机制”的问题了!
------解决思路----------------------
如果操作数据库有缓存快的话,还要缓存干嘛?
但如果仅仅是为了快就使用缓存而不用数据库,你这是因噎废食
如果只做参考,而不会发生变化,那这部分数据是可以做缓存的
你首先要清楚,缓存一般情况下仅适用变化不频繁但访问却比较频繁的数据,至于为什么说一般情况,因为有些业务性能需要,不得不将数据放入缓存或者内存进行操作,但为此需要产生大量的补偿机制防止数据丢失或异常
------解决思路----------------------
最好先找找为什么占用那么多内存的原因,可以跟其它WEB系统的人员一起分析看看先
------解决思路----------------------
服务器E就是承担了一个服务的功能,你可以用WS来做服务,也可以用WCF来做服务,甚至可以用WebAPI或者handler,当然除了WCF之外,其它几样都是基于HTTP访问的,通讯成本可能比较大,用WCF的话可以根据场景切换通讯协议
------解决思路----------------------
楼主可以把服务器E,就是你说的缓存换成一个数据库服务器,然后写个Websevice 服务来生成需要的接口,其他几个服务器都能够调用这个接口了,那问题就解决了呗