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)

大家都在看

  • 面向服务的体系架构(SOA)

    1、面向服务的体系架构(SOA) 面向服务的架构(service-oriented architecture)是Gartner于2O世纪9O年代中期提出的面向服务架构的概念。200…

    技术杂谈 2023年6月1日
    0111
  • B树详解

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 什么是B树 B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。使用B树这种数据结构…

    技术杂谈 2023年6月21日
    0100
  • STM32 例程-7 STM32固件库方式 读取SHT20 温湿度

    SHT20 .h文件 #ifndef SHT20_H #define SHT20_H #include "common.h" #include "st…

    技术杂谈 2023年6月1日
    0114
  • MySQL — 索引

    索引(Index)是高效获取数据的数据结构,就像书的目录,提高检索数据的效率。 优点:提高数据检索效率,降低数据库的 IO 成本;通过索引列对数据进行排序,降低数据排序的成本,降低…

    技术杂谈 2023年7月11日
    064
  • vue路由守卫用于登录验证权限拦截

    vue路由守卫用于登录验证权限拦截 to:进入到哪个路由去 from:从哪个路由离开 next:路由的控制参数,常用的有next(true)和next(false) home需要判…

    技术杂谈 2023年7月11日
    092
  • 400错误,Required String parameter ‘paramter’ is not present

    1.就拿简单的登录来说吧,这是开始的代码 @RequestMapping(value=”/login”)public ModelAndView login(…

    技术杂谈 2023年6月1日
    085
  • vue 版本查看

    如何查看vue版本号? 方法1、全局查看vue版本号 npm info vue方法2、局部(当前项目)查vue版本号 npm list vue version方法3、此外还可以通过…

    技术杂谈 2023年7月11日
    0105
  • go-micro开发RPC服务的方法及其运行原理

    go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理。 基本概念 go-micro有几个重要的概…

    技术杂谈 2023年7月11日
    095
  • oracle 添加白名单- 重启监听

    由于oracle中存在白名单,有新增主机需要访问,添加白名单需要重启监听 1.添加白名单 登陆oracle主机,su – grid 切到grid用户, vi $ORAC…

    技术杂谈 2023年5月30日
    093
  • 云娜:从计算、存储角度,谈网易数据治理工具产品实践

    导读:在公司内部,业务线经常面临数据有哪些、质量如何、是否可用、能产生多大价值的困惑,并且,随着数据量的增加,计算和存储资源面临瓶颈。本次将围绕数据治理重点关注的计算、存储等方面,…

    技术杂谈 2023年7月25日
    0109
  • subprocess模块简介

    subprocess模块可以执行系统命令,该模块允许用户创建一个新的进程,该进程会连接到input|output|error管道并获取到返回的状态码。 本文版本是以python3….

    技术杂谈 2023年7月11日
    0109
  • Spring Ioc源码分析系列–@Autowired注解的实现原理

    Spring Ioc源码分析系列–@Autowired注解的实现原理 前言 前面系列文章分析了一把Spring Ioc的源码,是不是云里雾里,感觉并没有跟实际开发搭上半…

    技术杂谈 2023年7月25日
    098
  • Kmp算法

    算法流程: kmp_search(char[] text,char[] pattern) 构建前缀表 prefix[0]默认&#…

    技术杂谈 2023年6月21日
    089
  • Linux 搭建Apollo

    简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用…

    技术杂谈 2023年7月11日
    084
  • Linux用户和用户组

    Linux用户和用户组 1.添加新的用户 (用户ID从500开始,0-99系统管理级别、100-499系统预留) useradd 选项 用户名 参数说明 选项: -c commen…

    技术杂谈 2023年7月11日
    075
  • 使用Gulp和Browserify来搭建React应用程序

    对React有一定了解之后,我们知道,需要把JSX文件转换成JS文件,组件需要导入导出。本篇就体验使用Gulp把JSX文件转换成JS文件,使用Browserify来把组件捆绑到一个…

    技术杂谈 2023年5月31日
    0135
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球