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)

大家都在看

  • fork()函数

    是UNIX中的分叉函数,将运行着的程序分成两个完全一样的进程。 fork() 有返回值: 0: 返回到新创建的子进程 负值:创建子进程失败 正数: 返回父进程或调用者 当父进程终结…

    技术杂谈 2023年5月31日
    077
  • iostat命令详解

    iostat 主要是统计 磁盘活动情况。 iostat有以下缺陷: iostat的输出结果大多数是一段时间内的平均值,因此难以反映峰值情况iostat仅能对系统整体情况进行分析汇报…

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

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

    技术杂谈 2023年7月11日
    081
  • C++处理系统相关权限问题

    权限问题处理是日常开发过程中很常见的一个操作,这里记录一下使用方法 1、给某个文件或文件夹赋予特定用户的特定访问权限 /* 给文件(夹)szPath设置用户名为pszAccount…

    技术杂谈 2023年7月10日
    072
  • HelloWorld小程序

    第一步 在文件夹里 鼠标右键 新建文本文档 更改文件的后缀为java 注意事项:如果你的后缀没有出现,可以进行如下操作 第二步 编写代码 记得写完Ctrl+s保存一下 第三步 编译…

    技术杂谈 2023年7月24日
    078
  • Kafka 生产者

    一个消息系统说白了无非就是由三部分组成,不同的消息系统只是这三部分的实现不同,或者会在这三部分之外扩充自己的特性。这三部分分别就是:生产者、消费者、消息队列 这篇文章主要介绍的是 …

    技术杂谈 2023年7月24日
    082
  • Wireshark基本介绍和学习TCP三次握手

    原文:http://www.cnblogs.com/tankxiao/archive/2012/10/10/2711777.html 阅读目录 wireshark介绍 wiresh…

    技术杂谈 2023年6月1日
    087
  • 协程 对称转换

    a 搜索 复制 posted @2022-07-21 20:44 papering 阅读(11 ) 评论() 编辑 Original: https://www.cnblogs.co…

    技术杂谈 2023年5月31日
    073
  • Word书签替换,加盖电子印章及转换PDF(Java实用版)

    一、前言 在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:…

    技术杂谈 2023年6月21日
    0107
  • Linux的NFS配置

    快速代码 nfs的Server配置文件和配置方法 echo ‘/newnfs 192.168.2.*(rw,sync,no_root_squash)’ >> /etc/…

    技术杂谈 2023年6月21日
    088
  • lsmod——显示已载入系统的模块

    lsmod——显示已载入系统的模块 lsmod 其实就是list modules的缩写,即 列出所有模块. 功能说明:显示已载入系统的模块。 语法:lsmod 说明:执行lsmod…

    技术杂谈 2023年5月31日
    081
  • JVM诊断命令jcmd介绍

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命…

    技术杂谈 2023年7月24日
    067
  • 腾讯云EKS 上部署 eshopondapr

    腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼…

    技术杂谈 2023年5月31日
    0104
  • 从同步函数 hello-world-dotnet 开始探索OpenFunction

    OpenFunction[1] 是一个现代化的云原生 FaaS(函数即服务)框架,它引入了很多非常优秀的开源技术栈,包括 Knative、Tekton、Shipwright、Dap…

    技术杂谈 2023年5月31日
    096
  • 音频之时域&频域

    一. 时域 & 频域 时域和频域是音频应用中最常用的两个概念,也是衡量音频特征的两个维度概念。 时域图如下: 横轴是时间,纵轴是声音强度,可知时域图是从时间维度来衡量一段音…

    技术杂谈 2023年5月31日
    089
  • 单调栈

    栈 栈是 OI 中常用的一种线性数据结构。 栈的修改是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。 下文均使用…

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