用了一段时间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

最新文章

  1. 使用Gitblit 在windows 上部署你的Git Server
  2. bash 语法使用
  3. texy
  4. 在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点
  5. 【jqGrid for ASP.NET MVC Documentation】.学习笔记.1.介绍
  6. ssh免密码登陆及其原理
  7. ios菜鸟总结2
  8. eclipse *.vm 文件,语法高亮
  9. Hibernate注解方法使用总结
  10. 编译LFS
  11. Java---设计模块(设计模块的简介及最简单的俩个单例代码加测试)
  12. 写JQuery 插件
  13. 基于Haproxy+Keepalived构建高可用负载均衡集群
  14. Java 基础 程序流程控制 (下)
  15. Unity应用架构设计(13)——日志组件的实施
  16. MD5加密Demo
  17. 视音频编解码学习工程:FLV封装格式分析器
  18. 如何查看jar包的版本号?(转)
  19. MVC(面试)
  20. bind this指针

热门文章

  1. TCP/IP、Http、Soap三个基本的通讯协议
  2. hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)
  3. 抽象工厂模式&简单工厂模式
  4. PAT 1021 Deepest Root
  5. OLEDB 枚举数据源
  6. git添加远程库基本操作
  7. oracle学习篇十二:索引
  8. 正则表达式验证问题(用户名、密码、email、身份证
  9. 前端给div加滚动条样式修改
  10. js 正则表达式简易教程