请教一下C#有哪些缓存框架?

问题描述

最近做一个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

时间: 2024-09-20 00:16:30

请教一下C#有哪些缓存框架?的相关文章

Objective-C的缓存框架EGOCache在iOS App开发中的使用_IOS

EGOCache简介 EGOCache is a simple, thread-safe key value cache store. It has native support for NSString, UI/NSImage, and NSData, but can store anything that implements <NSCoding>. All cached items expire after the timeout, which by default, is one da

使用Memcached、Spring AOP构建数据库前端缓存框架

上回说到Memcahed的安装及java客户端的使用,现在我们使用memcached.Spring AOP技术来构建一个数据库的缓存框架. 数据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用memcached实现数据库的前端缓存是个很不错的选择:但如果网站本身足够小只有一个服务器,甚至是vps的那种,不推荐使用memcached,使用Hibernate或者Mybatis框架自带的缓存系统就行了. 一.开启memcached服

写自己的缓存框架,JAD-CACHE架构设计篇

在之前一篇<写一个自己的通用缓存框架,以同时支持ehcache.mecache以及springcache注解等等>博文中,列出了自己的通用缓存框架需要实现在的大致功能总结如下: 1.提供统一的缓存操作api: 2.支持同时使用多种缓存实现: 3.提供灵活的配置: 4.需要防止缓存穿透: 5.需要可以灵活指定缓存存活时间: 6.需要任意控制缓存的停用或启用. 目前这个框架的编码部分已完成,并取名为JAD-CACHE,取这个名字的原因是因为它是我的个人的JAD项目的一部分,JAD项目是本人用业余时

MyBatis的一级缓存和二级缓存 以及 mybatis和ehcache缓存框架整合

查询缓存 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 基本由此图可以看出,我们在每一层都需要相应的缓存. mybatis持久层缓存 mybatis提供一级缓存和二级缓存 mybatis一级缓存是一个SqlSession级别,sqlsession只能访问自己的一级缓存的数据,二级缓存是跨sqlSession,是mapper级别的缓存,对于mapper级别的缓存不同的sql

Ehcache Core v2.4.1发布 纯Java进程内缓存框架

Java缓存框架 EhCache EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. 主要的特性有: 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过RMI.可插入API等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 9. 提供Hiber

数据库事务-数据库 事务 查询 缓存 框架

问题描述 数据库 事务 查询 缓存 框架 遇到一种情形 1 事务开始 2 插入记录A 3 查询 4 提交事务成功 5 查询 问 在3步能否查到A记录? 换种说话 如果第三步能查到 是什么机制造成的 目前有哪些框架/或者设置支持这种操作. 如果不能查到 为什么 是不是经过了某种设定的结果 谢谢回答,给出答案的链接也可以 解决方案 事务的隔离级别上有一个uncommitted 读未提交 但是读取的可能是另一个事务的数据,不知道这样能不能做到 在每个框架都有自己默认的事务隔离级别你可以设置一下看看行不

JAVA 开源缓存框架

  JBossCache/TreeCache  JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作.JBossCache能够通过Jboss应用服务或其他J2EE容器来运行一个Mbean服务,当然,它也能独立运行. JBossCache包括两个模块:TreeCache和TreeCacheAOP. TreeCache --是一个树形结构复制的事务处理缓存. TreeCacheAOP --是一个"面向

Java的进程内缓存框架:EhCache (转)

EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache缓存的特点: 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过RMI.可插入API等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 9. 提供Hibernate的缓存实现  

开源缓存框架比自己写的缓存类好在哪里?

问题描述 自己写的缓存类只有几百行,就是放在map中,有get()put()方法,可设置大小.失效时间等.看到java有许多开源缓存框架,代码量大得多,应该带来更多价值,有没有用过的,比自己写的缓存类好在哪里?我想评估一下,如果有意义就用缓存框架 解决方案 如果是单一的项目我觉的使用ehcahce就差不多了,自己写的话有很多问题考虑不到,例如线程安全,序列化等问题.ehcahce使用也很简单 . 如果是多个项目共享同一块缓存,那就不是map能解决的问题了,这样可以考虑用可以考虑用memchahe