C#开源磁盘/内存缓存引擎

  1. 增加了对批量处理的支持,写操作速度提升5倍,读操作提升100倍

  2. 增加了一个存储provider,可以选择不用STSdb做存储,而用物理文件/Dictionary。

  3. 增加了空间回收

  4. 增加了对并发的支持

业务系统用的是数据库,数据量大,部分只读或相对稳定业务查询复杂,每次页面加载都要花耗不少时间(不讨论异步),觉得可以做一下高速缓存,譬如用nosql那种key/value快速存取结果

提供一个简单易用的解决缓存方案,可以根据数据的大小缓存到内存或者磁盘。

方法1. 基于STSdb,提供高效的Key/Value存取,支持磁盘/内存,对Key无限制

方法2. 基于直接物理文件/Dictionary。Key必须是基本类型,譬如int/long/uint/ulong/DateTime/string等。

代码比较简单,花了2个小时写的,很多情况没考虑,譬如磁盘空间/内存不足,自动回收过期缓存等,这些留给大家做家庭作业吧。另外,为了发布方便,STSdb和fastJson的代码都合并到一个项目里。

这是一个抽象基类,提供存取接口。

主要调用缓存引擎

STSdb存储引擎

物理文件/Dictionary引擎

扩展函数

构造CacheEngine需要传递缓存保存到哪个文件夹。

如果你不喜欢基于磁盘的缓存,可以使用基于内存,构造函数传递空字符串便可。

同一个方法:Add。用户可以指定类型(Category),譬如User,Employee等。键(Key)支持泛型,值(Data)是object。有一个overload是过期日期(ExpirationDate),默认当前时间30分钟后

Get方法需要指定类型(Category)和键(Key)。

测试条件:1000条记录,7200RPM磁盘,i7。

项目中引用了System.Management是因为STSdb支持内存数据库,需要判断最大物理内存。如果不喜欢,大家可以移除引用,并且去掉STSdb4.Database.STSdb.FromMemory方法便可。

Original: https://www.cnblogs.com/unruledboy/p/SuperCache2.html
Author: 灵感之源
Title: C#开源磁盘/内存缓存引擎

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545666/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球