关于C#缓存系统的问题,请教各位前辈!!!!!!!!

lanjian1111 2015-03-02 10:38:27
现在公司的系统,有将很多的数据都保存到一个缓存系统中(ShareCache),方便其它系统读取数据,其中读写是很频繁的,现在的ShareCache跑几天就很占内存,数据一般只有几十M,但是ShareCache会占用到几个G,在占用内存到4G的时候服务就停止了,现在想换其他的缓存系统,以前有接触过memcached,了解不是很深,这个分布式缓存很强大,想咨询一下大家,像这样的业务一般在C#中使用哪种类型的缓存比较合适!!!
...全文
577 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanjian1111 2015-03-11
  • 打赏
  • 举报
回复
引用 44 楼 ygl_0724 的回复:
可以看看另外一个 REDIS 缓存
好的,我看看这方面的资料
lanjian1111 2015-03-11
  • 打赏
  • 举报
回复
引用 43 楼 jiangfling 的回复:
定量缓存和定时缓存
不可能定量和定时,因为系统实时要求很高,前面说过了,会不停的加入数据到缓存中,以及不停的从缓存读取数据
lanjian1111 2015-03-11
  • 打赏
  • 举报
回复
引用 42 楼 lincolnandlinda 的回复:
ShareCache本身也是支持分布式的, 为什么进行横向扩展? 个人认为, WebService之类根本不适合这个系统.
sharecache本身的资料太少了,我决定换Memcached了
ygl_0724 2015-03-06
  • 打赏
  • 举报
回复
可以看看另外一个 REDIS 缓存
PaulyJiang 2015-03-06
  • 打赏
  • 举报
回复
定量缓存和定时缓存
lincolnandlinda 2015-03-04
  • 打赏
  • 举报
回复
ShareCache本身也是支持分布式的, 为什么进行横向扩展? 个人认为, WebService之类根本不适合这个系统.
lanjian1111 2015-03-04
  • 打赏
  • 举报
回复
引用 39 楼 u011453200 的回复:
楼主可以把服务器E,就是你说的缓存换成一个数据库服务器,然后写个Websevice 服务来生成需要的接口,其他几个服务器都能够调用这个接口了,那问题就解决了呗
恩,要么换稳定的缓存,要么用数据库也是可以的
  • 打赏
  • 举报
回复
服务器E就是承担了一个服务的功能,你可以用WS来做服务,也可以用WCF来做服务,甚至可以用WebAPI或者handler,当然除了WCF之外,其它几样都是基于HTTP访问的,通讯成本可能比较大,用WCF的话可以根据场景切换通讯协议
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
引用 28 楼 starfd 的回复:
你写个服务不就可以了???

请教前辈一下,这样的系统怎么写服务



请教一下前辈
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
引用 28 楼 starfd 的回复:
你写个服务不就可以了???
前辈麻烦看看那个图,写一个服务不太适合吧
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
发一下简单的全部系统的架构吧,每一个系统都是单独的一个服务器



之所以不用数据库前面已经解释过了,这些键值对有很多是没有用的,只供其它系统读取参考,由于更新频繁,所有数据都保存到数据库,运行几个月以后,数据库中的数据又多起来了,查询速度又要解决,所以用了一个中间的ShaceCache
illhan98 2015-03-03
  • 打赏
  • 举报
回复
引用 26 楼 Z65443344 的回复:
如果你的数据量是固定的,或者即使不固定也是在某一个范围内波动的,而不是任何数据都可能拿来缓存 那么你就不应该用缓存,直接放内存里 缓存应该处理那些动态的数据,比如用户A访问了某些数据,用户B,C,D也要访问这些数据,那么为了加快速度,在用户A访问的时候从数据库中读取,读完就先放缓存里,在缓存过期之前,B,C,D去访问数据都不需要重新读数据库而是直接读缓存. 这些数据事先无法预测,可能A访问了这些数据之后,其他人就不再访问了,那么要及时的将这些无用的数据清理掉. 而对于你的需求来说,数据事先都是可以预测的,服务去轮询哪些数据每次都是一样的,而不是动态的 这东西完全可以放到静态字典里
之所以要把数据放到ShareCache中(单独的一台服务器上),是因为其他的WEB系统也需要读取ShareCache中的数据啊,有好几个系统都要读这个ShareCache中 的数据都嘛,还有一个原因就是向ShareCache中写数据也不止一台服务器,有好几个服务器会向ShareCache中写入数据
  • 打赏
  • 举报
回复
你写个服务不就可以了???
illhan98 2015-03-03
  • 打赏
  • 举报
回复
引用 25 楼 starfd 的回复:
为什么你们要用ShareCache呢,对于你描述的业务情况,完全可以把数据全部常驻内存,而不是使用缓存,相信GC进行内存释放的效率应该要远高于ShareCache(没用过ShareCache,所以此评价可能存在问题)
之所以要把数据放到ShareCache中(单独的一台服务器上),是因为其他的WEB系统也需要读取ShareCache中的数据啊,有好几个系统都要读这个ShareCache中 的数据都嘛
於黾 2015-03-03
  • 打赏
  • 举报
回复
如果你的数据量是固定的,或者即使不固定也是在某一个范围内波动的,而不是任何数据都可能拿来缓存 那么你就不应该用缓存,直接放内存里 缓存应该处理那些动态的数据,比如用户A访问了某些数据,用户B,C,D也要访问这些数据,那么为了加快速度,在用户A访问的时候从数据库中读取,读完就先放缓存里,在缓存过期之前,B,C,D去访问数据都不需要重新读数据库而是直接读缓存. 这些数据事先无法预测,可能A访问了这些数据之后,其他人就不再访问了,那么要及时的将这些无用的数据清理掉. 而对于你的需求来说,数据事先都是可以预测的,服务去轮询哪些数据每次都是一样的,而不是动态的 这东西完全可以放到静态字典里
  • 打赏
  • 举报
回复
为什么你们要用ShareCache呢,对于你描述的业务情况,完全可以把数据全部常驻内存,而不是使用缓存,相信GC进行内存释放的效率应该要远高于ShareCache(没用过ShareCache,所以此评价可能存在问题)
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
要么用空间换时间,要么用时间换空间 不想占用4G内存,那就多线程全部在数据库里排队等待检索好了,还用缓存干嘛
这是一个实时性要求很高的系统,去内存中读数据是不能排队的
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
要么用空间换时间,要么用时间换空间 不想占用4G内存,那就多线程全部在数据库里排队等待检索好了,还用缓存干嘛
可能我描述得不好,系统架构是这样,有一个系统不停的向ShareCache中放数据,大概有几十组的K-V的值,如果有新的value,那么就更新那个键值,这几十组的数据更新比较频繁,有可能2秒更新一下,最长是3分钟更新一次,然后有其它的系统来读ShareCache中的数据,读就很频繁了,可能平均2秒就会读取ShareCache中的数据,之所以想要解决占用 内存过多的原因是因为占用内存达到5G左右ShareCache就停止服务了,得人工介入,再重启,本身的这几十组的K-V只占用几十M的内存,100M都不到
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
如果你招聘一个程序员,你应该问问他是否学习过使用 System.Web.Caching.Cache 类的使用,是否知道数据缓存怎么用(如果是编写asp.net程序,还要知道页面缓存怎么用、页面片段缓存怎么用)。 如果它说“我在原来公司里看人家用过ShareCache,没听说过.net framework还有缓存框架”,那么你就可以想起这个帖子了。你招聘了一个不太熟悉 .net 框架的程序员。
可能我描述得不好,系统架构是这样,有一个系统不停的向ShareCache中放数据,大概有几十组的K-V的值,如果有新的value,那么就更新那个键值,这几十组的数据更新比较频繁,有可能2秒更新一下,最长是3分钟更新一次,然后有其它的系统来读ShareCache中的数据,读就很频繁了,可能平均2秒就会读取ShareCache中的数据,之所以想要解决占用 内存过多的原因是因为占用内存达到5G左右ShareCache就停止服务了,得人工介入,再重启,本身的这几十组的K-V只占用几十M的内存,100M都不到
lanjian1111 2015-03-03
  • 打赏
  • 举报
回复
可能我描述得不好,系统架构是这样,有一个系统不停的向ShareCache中放数据,大概有几十组的K-V的值,如果有新的value,那么就更新那个键值,这几十组的数据更新比较频繁,有可能2秒更新一下,最长是3分钟更新一次,然后有其它的系统来读ShareCache中的数据,读就很频繁了,可能平均2秒就会读取ShareCache中的数据,之所以想要解决占用 内存过多的原因是因为占用内存达到5G左右ShareCache就停止服务了,得人工介入,再重启,本身的这几十组的K-V只占用几十M的内存,100M都不到
加载更多回复(26)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧