SharpCached小规模.Net缓存源码(VS2008项目)

SharpCached是用Remoting实现的IIS外缓存服务。相当于是MemCached的C#实现,不过是个迷你版的。因为有很多功能没有实现。

毕竟MemCached是C版的,不是每个人都会改C代码。相比而言改C#代码应该更加容易 :  )

项目介绍:

SharpCached项目是Windows Service服务,需要注册为系统服务,并且需要在App.config设置端口。

SharpCached.ICarrier项目是调用的接口。

SharpCachedClient项目是调用的实现。

TestSharpCached做了一个简单的Unit测试。


原理就是在WEB端通过引入SharpCachedClient,用Remoting对SharpCached服务请求数据。而SharpCached利用静态的散列数组存储要缓存的数据。

使用实例:
   SharpCatchedAPI api = new SharpCatchedAPI();
   api.Init();

   api.Set("t", DateTime.Now);

   if (api.Exits("t"))
    Console.WriteLine(api.Get("t").ToString());
   else
    Console.WriteLine("no found");

实际应用一:

string catchkey = "ccc";
SharpCatchedAPI m = new SharpCatchedAPI();
   m.Init();
   object o = m.Get(catchkey);
   if (o != null)
    return (DataTable)o;
//构造缓存数据 DataTable dt = .............
m.Set(catchkey ,dt);

实际运用二:

string catchkey = "ccc";
SharpCatchedAPI m = new SharpCatchedAPI();
   m.Init();
   if(m.Exits(catchkey ))
    return (DataTable) m.Get(catchkey);
//构造缓存数据 DataTable dt = .............
m.Set(catchkey ,dt);


没有实现分布式处理方法,也没有实现分级缓存。因此,适用缓存规模最大应该是1G左右(.Net的内存使用极限是内存的1/4,不太记得了,反正是有极限的)。

源码只作为参考,实际运用中产生问题,和我无关哈~~!,遇到问题一起探讨倒是可以的: )

下载地址:(大小46K)
http://files.cnblogs.com/birdshover/SharpCatched.rar


SharpCached2.gif

posted on 2008-03-29 01:41 Birdshover 阅读(2127) 评论(23)  编辑 收藏 所属分类: WinForm

评论

#1楼  2008-03-29 03:29 laputa.sky [未注册用户]

MemCatched-->MemCached?   回复  引用    

#2楼 [楼主] 2008-03-29 03:47 BirdsHover      

@laputa.sky
汗,打错单词了,看来英文是真的很差啊·······   回复  引用  查看    

#3楼 [楼主] 2008-03-29 04:24 BirdsHover      

用着感觉还可以啊,呵呵

  回复  引用  查看    

#4楼 [楼主] 2008-03-29 04:56 BirdsHover      

CPU总算降下来了,缓存还是好啊,可以睡觉了zzzZZZ   回复  引用  查看    

#5楼  2008-03-29 08:57 草屋主人      

我去年在项目中也写过一个,跟你差不多原理,因为我是多台机器需要用到缓存,为了避免缓存的重复,所以就开发了一个分布式remoting的缓存系统。可以指定过期时间等。   回复  引用  查看    

#6楼  2008-03-29 09:27 沙加      

弄下来研究一下,谢谢LZ分享~~   回复  引用  查看    

#7楼  2008-03-29 12:19 队长      

博主能介绍一下开发这个库的意图吗?
IIS外缓存服务,通过Remoting把缓存数据放到别的机器上,以减少本机IIS上的内存消耗吗?   回复  引用  查看    

#8楼 [楼主] 2008-03-29 12:37 BirdsHover      

最新战报,缓存470M数据运行稳定



  回复  引用  查看    

#9楼 [楼主] 2008-03-29 12:47 BirdsHover      

@队长
主要是几个程序可以共享缓存。而且把缓存分出去,可以减轻IIS的压力,在IIS进行内存回收时,如果缓存很大,很容易done掉   回复  引用  查看    

#10楼  2008-03-29 13:17 Ariel Y.      

可以放到CodePlex上   回复  引用  查看    

#11楼  2008-03-29 13:23 gyf19 [未注册用户]

可以使用wcf技术, 官方说wcf技术比Remoting 要快!! 本机的话,可以使用wcf 通道,传输更快。

楼主的程序现在不算缓存, 只是一个对象容器
  回复  引用    

#12楼  2008-03-29 13:39 Jeffrey Zhao      

@gyf19
其实要追求高性能的话,应该是用自己设计的通信协议。
WCF等考虑的东西很多,而现在的组件需要的功能其实相对非常简单。   回复  引用  查看    

#13楼  2008-03-29 13:59 gyf19 [未注册用户]

@Jeffrey Zhao
同意!!   回复  引用    

#14楼  2008-03-29 14:06 Jeffrey Zhao      

还有为什么说.NET应用程序只能占内存总量的1/4,无厘头了,极限就是操作系统用户态可用内存的极限。   回复  引用  查看    

#15楼  2008-03-29 14:19 gyf19 [未注册用户]

@Jeffrey Zhao

自己设计通信协议难度比较高, 感觉使用TCP ,就可以了!本机建议使用通道呢

  回复  引用    

#16楼  2008-03-29 15:16 Jeffrey Zhao      

@gyf19
我就是指基于Socket的通信,我说的“通信协议”是指传递数据的格式。   回复  引用  查看    

#17楼 [楼主] 2008-03-29 15:46 BirdsHover      

@Jeffrey Zhao
默认情况下.net应用程序使用内存的极限是最大内存的1/4,我以前遇到过这个问题。当时开发的一个程序,使用的递归处理数据,应该是造成了DataTable来不及回收,报outofmemory错误。

当然通过配置可以加大使用内存。这个配置方法网上有的。   回复  引用  查看    

#18楼 [楼主] 2008-03-29 15:48 BirdsHover      

@Jeffrey Zhao
@gyf19
对于一般规模的应用,我认为Remoting就可以了,没有必要增加复杂度   回复  引用  查看    

#19楼  2008-03-29 16:09 Jeffrey Zhao      

@BirdsHover
建议重新检查您的程序,肯定另有原因。   回复  引用  查看    

#20楼  2008-03-29 16:13 Jeffrey Zhao      

@BirdsHover
一般规模的应用,根本不需要分布式缓存,进程内缓存即可。
缓存的目的是提高性能,它是性能要求很高的功能,使用自己设计的通信协议估计能提高30%的性能,这点很重要。   回复  引用  查看    

#21楼 [楼主] 2008-03-29 18:12 BirdsHover      

@Jeffrey Zhao
你可能没考虑过这种情况,数据处理很复杂,对CPU压力很大。但是计算结果却在一定时间内固定,结果集却很小,数量却很多。而这个结果很多个站点需要共享。   回复  引用  查看    

#22楼  2008-03-29 22:49 Jeffrey Zhao      

@BirdsHover
即使这样又如何?无论是什么方式的缓存,既然是“缓存”性能就一定要精打细算,否则就失去了缓存的价值了。
而且既然是一个缓存组件,它就不该只针对你这种特殊情况作设计。为什么memcached那么流行?就是因为它性能很高,消耗CPU缺很低,而且通用。这才是缓存组件的方向啊,呵呵。   回复  引用  查看    

#23楼  2008-03-29 23:02 jt [未注册用户]

if (api.Exits("t"))
exits ==> exist??   回复  引用    

导航

公告

网名: yurow birdshover
       无术 夕阳轨迹 等
本名: 谢平
籍贯: 江苏溧阳
位置: 上海
职业: C# & 打字
联系方式: 19999351(QQ)
 MSN.gif
有一天,我对你说你是猪,你说:我是猪才怪。于是我便开始叫你猪才怪。终于有一天你忍不住在众人面前大声宣布:我不是猪才怪! 7-25 15:25
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

与我联系

常用链接

留言簿

我管理的小组

我参与的团队

我的标签

随笔分类(79)

文章分类(19)

收藏夹(1)

关注的博客

搜索

积分与排名

最新评论