用了一段时间java,java实现服务端程序很简单,有很多公共开源的组件或者软件。但是c#的很少。

现在准备自己写点东西,学习下新的东西,总结下c#的内容以及我们经常用的内容,抽离成类,组件,模型。方便在开发时能够有个方向和参考。同时也方便设计,充分运用拿来主义,实现功能组合。

本篇是前面几篇之后的续篇。前已经提到了关于缓存的例子。最简单的一种,就是开辟一个集合,放置数据,提供添加和获取的接口。我喜欢用stack和时间来计算平衡,这种应用是最简单的。后面一篇整理了网上的代码LRU实现的缓存,还是可以在很多场景下用的,每一个添加都操作,再最大值移除时很方便。

最近在网上找了很久,都没有发现c#实现的本地缓存的组件但是java有很多。所以花了几天时间,自己做了一个K-V缓存,可以用,也可以修改,毕竟一个人的能力是有限的,java的很多本地缓存都是公司开发出来的。我提供了一个缓存的接口,一个排序比较接口以及创建缓存的工厂。

简单列举下,代码中有相信注释。

1.CacheConfig 缓存配置类,配置缓存时间,大小,移除策略等

2.ICache 缓存接口

3. JYCache 缓存实现类

4.CacheFactory 缓存创建类

5.IPolicyCompare 缓存比较器,用于策略消失时比较排序,选择要消失的缓存

策略:FIFO,LRU,LFU代码中已经实现。

这里有一个优化,就是LRU,如果允许使用很多内存空间,则在操作时会记录操作的先后顺序,类似网上的LRU实现。

如果不允许,则在触发消失时会去按照比较器排序,然后移除,这样有一个比较的过程,会慢。

关于比较器,这个我考虑了很久,原本是想让外部能够自定义。所以我抽取了一个接口,外部实现了以后就按照比较器消失。但是完成以后发现还是要改代码,因为在缓存的包装器中,我只是记录了缓存写入时间,服务时间以及服务次数,是按照FIFO,LRU,LFU策略来实现的。自定义的话我不知道要记录哪些操作,所以如果你需要,需要自己增加记录,在缓存实现的添加和获取2个方法中增加。然后实现比较接口。我已经在对外的实体中增加了一个custom字段用于扩展比较策略。

项目地址:

https://github.com/jinyuttt/JYCache.git
---------------------
作者:jason成都
来源:CSDN
原文:https://blog.csdn.net/jinyuttt/article/details/83822676
版权声明:本文为博主原创文章,转载请附上博文链接!

c#本地缓存实现的更多相关文章

  1. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

  2. 微信小程序之本地缓存(十)

    [未经作者本人同意,请勿以任何形式转载] 目前,微信给每个小程序提供了10M的本地缓存空间(哎哟妈呀好大) 有了本地缓存,你的小程序可以做到: 离线应用(已测试在无网络的情况下,可以操作缓存数据) 流 ...

  3. HTML5本地缓存数据

    //HTML5本地缓存数据 function putObj(key, data) { if (!!window.localStorage) { var obj = { "key": ...

  4. iOS //清除本地缓存

    //清除本地缓存 -(void)clearCache{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...

  5. Java8简单的本地缓存实现

    原文出处:lukaseder         Java8简单的本地缓存实现 这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在 ...

  6. Java学习之ConcurrentHashMap实现一个本地缓存

    ConcurrentHashMap融合了Hashtable和HashMap二者的优势. Hashtable是做了线程同步,HashMap未考虑同步.所以HashMap在单线程下效率较高,Hashtab ...

  7. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  8. OutputCache 如何使用本地缓存 【转】

    注意!ASP.NET MVC 3 的一个 OutputCache 问题   在用 ASP.NET MVC 3 重写博客园网站首页时,特地留意了一下这个缓存问题,通过这篇博文分享一下. 在 ASP.NE ...

  9. 如何查看与刷新DNS本地缓存

    如何查看与刷新DNS本地缓存 一.查看DNS本地缓存 在cmd窗口输入:ipconfig/displaydns 二.刷新DNS本地缓存 在cmd窗口输入:ipconfig/flushdns 之后输入: ...

  10. 第七章 企业项目开发--本地缓存guava cache

    1.在实际项目开发中,会使用到很多缓存技术,而且数据库的设计一般也会依赖于有缓存的情况下设计. 常用的缓存分两种:本地缓存和分布式缓存. 常用的本地缓存是guava cache,本章主要介绍guava ...

随机推荐

  1. ASP.NET内置对象-网页转向的4中方法

    ASP.NET页面跳转的方法 1.超链接 2.Response.Redirect(“Urlstring”) 3.Server.Transfer(“UrlString”) 4.PostBackUrl 1 ...

  2. Git读档

    $ git config --global user.name "meng kai" $ git config --global user.email 363255751@qq.c ...

  3. 【Android】9.0活动的生命周期(二)——实际代码演示

    1.0  新建一个项目ActivityLifeCycleTest. 新建两个活动NormalActivity和DialogActivity,勾选“Generate Layout File”. 文件目录 ...

  4. Android 获取系统时间和网络时间

    有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差. 直接上代码. 1.清单文件中网络添加权限. <!-- 访问Internet资 ...

  5. 编程中遇到的Python错误和解决方法汇总整理

    这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下   开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析, ...

  6. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  7. Spyder更改默认工作路径已经文件路径

    打开spyder,选择菜单栏中的Tools--->Preferences--->Current working directory   然后选择最下面的单选按钮The following ...

  8. MyEclipse2015Stable3.0破解方法

    原理大概是这样的(个人粗略分析):获取当前的日期,来设置证书失效日期,解析后生成码-->再转码,最后生成序列号. 1.新建一个Java工程,(不会安装jdk创建环境变量的,请前往传送门:链接.) ...

  9. OC property(声明)

    @interface Student : NSObject { int _age; int _no; float _height; } // 当编译器遇到@property时,会自动展开成getter ...

  10. IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)

    ●  什么是JPush ●  一套远程推送解决方案,支持android和iOS两个平台 ●  它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ●  更多的信息,可 ...