文件数据缓存(key-Value)

为了解决大量数据缓存,消耗内存过多的问题,特别实现了文件缓存;该缓存主要是应用于多存少读的情况,一般我们做缓存是实现将数据放在内存中或者数据库中;放在内存中就会消耗很大内存,尤其在高并发大数据缓存时,更容易造成内存溢出,数据库在很大程度能够满足我们需求,但是在极端情况,每秒产生很大数据时,数据库速度就是问题;

基于内存和数据库原因,测试将数据直接放在文件中,是很快的,一般的机械硬盘30-45M/s,一次写入速度很快;

整个缓存过程:提高接口,数据缓存50M左右,将数据写入特定的DB文件中,每次10M写入,这样做只是为了平衡硬盘写入,防止影响其它写入;

缓存将数据byte字节(value值写入DB文件),同时形成数据索引将位置放在在索引文件中(csv文件),保存key对应的数据文件名称,对应文件中的位置;每20000个key形成一个文件,再次把该索引文件名称及生产时间写入一个全局索引文件中;

在缓存中需要设置key的缓存个数和缓存时间,默认大小是long的最大值,时间是30分钟(因为我的需要设置);后台现场会在一定环境下启动线程,删除索引文件和DB文件,主要是按照时间,key个数,文件大小来决定启动;

重新读取值时,先检索全局索引,从后往前读取,或者最新生成的数据索引文件,索引文件都分割的很小,所以一次读入到内存,查找key,找到对应的数据位置,在读取具体的值;

整个控制并不是100%精确,这是我的需要,如果做精确控制,则要添加很多同步控制,这样会降低性能和速度,但是也不会影响一般需求使用,肯定比其它方式快;

测试工作已经完成了,是我没有想到是,刚刚开始做的时候觉得应该简单,但是在完成时还是花了很多时间;

一开始的缓存,也是使用了数据库,或者存储用文件索引用文件,最后改成了全部用文件。程序就在在于摸索吧。

程序同步到git和csdn,欢迎大家一起写“废代码”;

数据大小都是按照硬盘30M/s,一般cpu配置写的,如果没有把握不要乱改

时间: 2024-10-13 16:42:18

文件数据缓存(key-Value)的相关文章

Android 数据缓存-文件存储

Android APP开发过程中,我们通常会加入缓存模块.缓存即在本地保存APP的一些数据,大部分是将网络请求的数据进行本地保存,这样在缓存数据有效期内就可以直接使用缓存数据,降低了APP和服务器的压力,也极大提升了用户体验.Android数据缓存既可以以数据表的形式进行保存,也可以以文件的形式进行缓存.这里我主要通过缓存文件存储数据,并在APP下一次启动时读取. Usage 整个Cache模块的设计思想很简单,每个缓存数据都对应一个key,每个缓存数据又会被存到以此key命名的文件中,需要时直

Spring整合Redis做数据缓存(Windows环境)

当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是用java开发的缓存组件,和java结合良好,直接在jvm虚拟机中运行,不需要额外安装什么东西,效率也很高:但是由于和java结合的太紧密了,导致缓存共享麻烦,分布式集群应用不方便,所以比较适合单个部署的应用. Redis需要额外单独安装,是通过socket访问到缓存服务,效率比Ehcache低,但

基于IBM Bluemix的数据缓存应用实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:IBM® Data Cache for Bluemix 是高速缓存服务,支持 Web 和移动应用程序的分布式高速缓存场景.高速缓存服务使用数据网格 技术,您可以在其中存储键值对象.Data Cache 提供了一个业务就绪的内存数据网格 (IMDG),其将数据放在接近逻辑的位置并随着业务扩展仍将其保留在此.很容易使用并扩展现有应用程序的性能和可伸缩性.它可以帮助将冗余事务降到最低.提高响

asp.net数据缓存(应用程序缓存)

应用程序缓存是用来存储与应用程序相关的对象,主要是由Cache类来实现的.命名控件: using System.Web.Caching;添加缓存1.指定键和值   Cache["key"] = "value"; 这种方法添加缓存最方便,但是如果需要设置缓存的有效期.依赖项等特性,它就变得无能为力了 2.使用Add()方法——只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项,则会失败).   Cache.Add("key",&q

ThinkPHP 3.2.3 数据缓存与静态缓存

ThinkPHP 3.2.3 中手册中数据缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1835 静态缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1839 数据缓存 使用 S 方法进行数据缓存,缓存文件默认的方式是文件缓存(DATA_CACHE_TYPE = File),文件缓存默认的保存路径是 ./Application/Runtime/Temp 当使用默认的缓存方式时,不需要在配置文件中进行配置,直

一个不错的PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类  代码如下 复制代码 <?php    /*    * 缓存类    cache   * 作    者:多菜鸟   * 实    例:   */   /*include( "cache.php" );       $cache = new cache(30);   $cache->cacheCheck();       echo dat

Cache 应用程序数据缓存

System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类.此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集.它还为这些对象提供了失效功能,并为您提供了添加和移除这些对象的方法.您还可以 添加依赖于其他文件或缓存项的对象,并在从 Cache 对象中移除对象时执行回调以通知应用程序. protected void Page_Load(object sender, EventArgs e) { string CacheKey = "c

.net缓存——基于文件的缓存

一,.Net中的缓存基础知识 .net中支持的两种依赖: CacheDependency SqlDependency 表示对于文件或者目录的依赖 表示对于SQL数据库的依赖 过期时间 绝对过期时间 滑动过期时间 一个特定的时间点,类型为DateTime 一个时间间隔,类型为TimeSpan 优先级  :   CacheItemPriority 由于我们需要缓存大量的数据,在内存有限的情况下,就必须对缓存的数据进行优先级分类,以便在需要的时候,将不重要的数据从缓存中移除.优先级用来指定缓存数据的重

Spring Boot使用redis实现数据缓存

基于Spring Boot 1.5.2.RELEASE版本,一方面验证与Redis的集成方法,另外了解使用方法. 集成方法 配置依赖 修改pom.xml,增加如下内容. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 配置Redis