问题描述
最近做一个winform项目,里面有大量的数据字典记录。如果客户端每次请求,字典数据都从数据库里获取,这样效率上都有一定影响。能不能在服务端缓存这些数据,用到的时候直接从缓存里取。因为才转过来做C#,之前一直做java开发。对c#了解不是太多。请问一下c#有没有类似JAVA的ehcache这样的缓存框架?或者大家都用什么解决方案来进行缓存?
解决方案
解决方案二:
一直都用redis,偶尔也用一些类似key-value结构的数据库
解决方案三:
解决方案四:
刚才找了看了ehcache一下,估计做J2EE都是喜欢用框架,高度集成。本质上,用SOCKET,或者SOAP能解决异构通讯问题,看你是否愿意底层一步一步自己架构。懒人,还是做懒人吧,框架应该会有的。
解决方案五:
除了nosql这种方案呢?
解决方案六:
简单的就用Dictionary.net有数据MemoryCache,你也可以从ObjectCache派生自己现实缓存框架
解决方案七:
应用层不做分布式的话,直接Directory就没问题
解决方案八:
字典可以缓存到客户端,使用Dirictory<>、HashTable等都可以
解决方案九:
在winform中使用它仍然有效。
解决方案十:
学会使用缓存的关键,就是学会调整和设置“缓存依赖项”。有些人说“把数据保存在内存里,就是缓存”,这其实是根本不懂缓存的。缓存要尽可能地少占用内存,要尽可能在数据变脏时自动清理,要在内存不足时自动清理,要具有各种缓存依赖项的“级联关联”性。
解决方案十一:
利用Cache.Add方法将数据信息缓存示例//将数据项目加入缓存protectedvoidbtnAddCache_Click(objectsender,EventArgse){//利用Cache.Add()方法将数据加入缓存Cache.Add("Name",txtUserName.Text,null,System.Web.Caching.Cache.NoAbsoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.CacheItemPriority.Default,null);Cache.Add("Photo",txtTel.Text,null,System.Web.Caching.Cache.NoAbsoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.CacheItemPriority.Default,null);Cache.Add("Position",txtJob.Text,null,System.Web.Caching.Cache.NoAbsoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.CacheItemPriority.Default,null);txtMsg.Text="缓存加入成功!";}//codego.net/tags/11/1///显示缓存数据protectedvoidbtnDisplayCache_Click(objectsender,EventArgse){IDictionaryEnumeratorCacheIDE=Cache.GetEnumerator();//显示缓存数据inti=0;stringinfo=null;info+="缓存项目数据(Key/Value):"+"<br>";while(CacheIDE.MoveNext())//循环输出缓存项目{info+=i.ToString()+".";info+=CacheIDE.Key.ToString()+":";info+=CacheIDE.Value.ToString()+"<br>";i++;}if(Cache["Name"]==null)//判断缓存是否有数据项目{txtMsg.Text="缓存内容为Null值!";}else{txtMsg.Text=info;}}
解决方案十二:
C34.0后就有runtime.cache了。可以做个memorycachae什么的,在客户端缓存常用的数据就行了。
解决方案十三:
把所有的需要的数据写到一个TXT文件里面,然后用CacheDependency去监视这个文件,如果发生变化,就重新刷新Cache,把文件内容加载进去,然后操作,这样只要不变化、以及只要Cache不过期,读取的会一直是cache里面的内容。不过有一个前提,你需要写一个小程序,去定期的检测TXT文件内容的来源地的数据有没有更新,如有更新,直接刷新TXT里面的内容。
解决方案十四:
dotnet的notify不行么?
解决方案十五:
引用12楼youzelin的回复:
把所有的需要的数据写到一个TXT文件里面,然后用CacheDependency去监视这个文件,如果发生变化,就重新刷新Cache,把文件内容加载进去,然后操作,这样只要不变化、以及只要Cache不过期,读取的会一直是cache里面的内容。不过有一个前提,你需要写一个小程序,去定期的检测TXT文件内容的来源地的数据有没有更新,如有更新,直接刷新TXT里面的内容。
Why要写Txt,CacheDependency支持很多依赖情况,自己也可以写第三方的支持。Txt要用HDI/O必然慢,20年前的老系统估计会这么玩。
解决方案:
引用14楼chentaoyql的回复:
Quote: 引用12楼youzelin的回复:
把所有的需要的数据写到一个TXT文件里面,然后用CacheDependency去监视这个文件,如果发生变化,就重新刷新Cache,把文件内容加载进去,然后操作,这样只要不变化、以及只要Cache不过期,读取的会一直是cache里面的内容。不过有一个前提,你需要写一个小程序,去定期的检测TXT文件内容的来源地的数据有没有更新,如有更新,直接刷新TXT里面的内容。Why要写Txt,CacheDependency支持很多依赖情况,自己也可以写第三方的支持。Txt要用HDI/O必然慢,20年前的老系统估计会这么玩。
请你举例,并写一下接近实际代码的伪代码看看。
解决方案:
引用15楼youzelin的回复:
Quote: 引用14楼chentaoyql的回复:
Quote: 引用12楼youzelin的回复:
把所有的需要的数据写到一个TXT文件里面,然后用CacheDependency去监视这个文件,如果发生变化,就重新刷新Cache,把文件内容加载进去,然后操作,这样只要不变化、以及只要Cache不过期,读取的会一直是cache里面的内容。不过有一个前提,你需要写一个小程序,去定期的检测TXT文件内容的来源地的数据有没有更新,如有更新,直接刷新TXT里面的内容。Why要写Txt,CacheDependency支持很多依赖情况,自己也可以写第三方的支持。Txt要用HDI/O必然慢,20年前的老系统估计会这么玩。
请你举例,并写一下接近实际代码的伪代码看看。
其实现在很多缓存系统都是这原理,与你说的其实只有一点区别,就是数据不需要写入文件,写入内存即可,这难度不大的。Hadoop倒是文件缓存,不过是linux的了,Hadoop响应是秒级的相对很慢的,
解决方案:
我想问一下,楼主最终是怎么实现的呢?memcached?C#Redis?
解决方案:
https://github.com/woxieao/CacheService