c# 本地完整缓存组件
用了一段时间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
c# 本地完整缓存组件的更多相关文章
- 分布式二级缓存组件实战(Redis+Caffeine实现)
前言 在生产中已有实践,本组件仅做个人学习交流分享使用.github:https://github.com/axinSoochow/redis-caffeine-cache-starter 个人水平有 ...
- 构建自己的PHP框架--构建缓存组件(2)
上一篇博客中使用文件实现了缓存组件,这一篇我们就使用Redis来实现一下,剩下的如何使用memcache.mysql等去实现缓存我就不一一去做了. 首先我们需要安装一下 redis 和 phpredi ...
- 构建自己的PHP框架--构建缓存组件(1)
作为一个框架,我们还没有相应的缓存组件,下面我们就来构建我们的缓存组件. 先来定义一下接口,在 src 文件夹下创建 cache 文件夹,在cache文件夹下创建 CacheInterface.php ...
- golang开发缓存组件
代码地址github:cache 花了一天时间看了下实验楼的cache组件,使用golang编写的,收获还是蛮多的,缓存组件的设计其实挺简单的,主要思路或者设计点如下: 全局struct对象:用来做缓 ...
- iOS - LocalCache 本地数据缓存
1.自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视 ...
- Android清除本地数据缓存代码案例
Android清除本地数据缓存代码案例 直接上代码: /* * 文 件 名: DataCleanManager.java * 描 述: 主要功能有清除内/外缓存,清除数据库,清除shar ...
- Django学习之十二:Cache 缓存组件
目录 Django Cache 缓存组件 缓存逻辑伪代码 配置缓存源 可配置参数说明 01. Django的默认缓存 02. 基于Redis的django-redis 03. 自定义cache 04. ...
- React Native之本地文件系统访问组件react-native-fs的介绍与使用
React Native之本地文件系统访问组件react-native-fs的介绍与使用 一,需求分析 1,需要将图片保存到本地相册: 2,需要创建文件,并对其进行读写 删除操作. 二,简单介绍 re ...
- .Net Core缓存组件(Redis)源码解析
上一篇文章已经介绍了MemoryCache,MemoryCache存储的数据类型是Object,也说了Redis支持五中数据类型的存储,但是微软的Redis缓存组件只实现了Hash类型的存储.在分析源 ...
随机推荐
- 使用vue-router切换页面时,获取上一页url以及当前页面url
今天在实现一个小功能的时候,遇到一个问题,使用vue-router获取上一页面的url信息,我尝试了多种方式,发现使用vue-router的canDeactivate钩子实现这个功能最为方便,现在将我 ...
- XML深入了解(XML JavaSprint)
XMLHttpRequest 对象 XMLHttpRequest 对象用于在后台与服务器交换数据. XMLHttpRequest 对象是开发者的梦想,因为您能够: 在不重新加载页面的情况下更新网页 在 ...
- 2、Spring之AOP
AOP术语 通知:定义了切面是什么以及何时使用.除了要描述页面要完成的工作,通知还解决了何时执行这个工作的问题. 连接点:连接点是一个物理的存在.这个点可以是调用方法时.抛出异常时.甚至是修改一个字段 ...
- Android之侧滑导航栏
今天学习的新内容是侧滑导航栏,我想大家肯定都比较熟悉了,因为这个效果在qq里面也有,最近一直跟室友们玩的游戏是快速让自己的头像的点赞量上千.当然我的效果跟qq是没有办法比的,因为那里面的功能是在是太强 ...
- 利用函数回调获取setInterval中返回的值
我们都知道,定时器里面想返回值如果你用return根本没作用,那么怎么拿到定时器所返回的值呢, 现在只需要利用回调函数,给主函数传一个函数类型的参数callback,然后把想要返回的num再传给cal ...
- javascript对象(3)
这个对象,不是那个对象,第三哦! 对象之间会存在继承,所以,来说一下他们之间存在的三种三种继承方式: 1.冒用继承 //创建了孙悟空构造函数 function Sun(change,weapon,gf ...
- Java入门到精通——调错篇之Eclipse Java compiler level dose not match the version of the installed Java project
一.错误现象. java项目显示红色,并且类中引用包中会报红色错误,在Eclipse下面显示下面错误提示如图: 二.错误原因. 通过字面意思一看就很明白java的版本不对. 三.解决办法. 3.1右键 ...
- Elipse plugin or Bundle & OSGI
Develop and register service, lookup and use service! Android Design on service's publish-find-bind ...
- linux 中环境变量配置文件说明
1. 修改/etc/profile文件 特点:所有用户的shell都有权使用你配置好的环境变量 说明:如果你的电脑仅用作开发,建议使用此配置,因为所有用户的shell都有权使用你配置好的环境变量,所以 ...
- Laravel 开源电商体验与部署
体验 开源项目已经部署了体验环境,开源通过扫描下方小程序码进行体验: 我们部署了 Laravel API demo 环境,访问地址:https://demo-open-admin.ibrand.cc/ ...