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

基于内存和数据库原因,测试将数据直接放在文件中,是很快的,一般的机械硬盘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配置写的,如果没有把握不要乱改

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

  1. Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)

    Dcloud课程5 php如何实现文件缓存技术(静态数据缓存) 一.总结 一句话总结:保存在磁盘上的静态文件,用PHP生成数据到静态文件中.其实cookie和session使用的就是这样的技术,所以c ...

  2. 文件分片 浏览器文件大小限制 自定义请求头 在一个资源的加载进度停止之后被触发 arrayBuffer 异步 二进制数据缓存区

    js 整数限制 浏览器文件大小限制 https://w3c.github.io/FileAPI/#dom-blob-arraybuffer https://developer.mozilla.org/ ...

  3. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  4. Memcached 数据缓存系统

    Memcached 数据缓存系统 常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html Memcached是一个自由开源的,高性能,分布式内存对 ...

  5. ThinkPHP 3.2.3 数据缓存与静态缓存

    ThinkPHP 3.2.3 中手册中数据缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1835 静态缓存的地址是:http://www.kancloud ...

  6. iOS - LocalCache 本地数据缓存

    1.自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视 ...

  7. cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

    Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...

  8. SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]

    前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1.     <ASP.NET 2.0开发指南> 2.   ...

  9. ASP.NET缓存 Cache之数据缓存

    添加 Cache[Key]=object  or Cache.Insert 移除 Cache.Remove(key) 1.将值直接写入Cache 代码如下 复制代码 HttpContext.Curre ...

随机推荐

  1. Hailstone冰雹序列问题

    在复习数据结构,课程中提到Hailstone冰雹序列问题,问题如下 代码如下: public List<int> Hailstone(int n) { List<int> li ...

  2. 使用nginx反向代理实现多端口映射(未解决)

    问题: 想实现访问在同一个主机上实现多个域名访问, 如用 blog.xxx.com访问博客(使用8000端口), app.xxx.com访问其他应用(使用8080端口): 不同的服务用URL区分,不用 ...

  3. Golang微服务:万精油NATS在Micro中的应用

    NATS是一个Golang技术栈的MQ服务,类似NSQ,但NATS更轻量级.性能更好.不支持离线.支持同步/异步通信模型,非常好用. NATS在MICRO中有哪些应用 Transport 笔者以前开发 ...

  4. Python学习之路基础篇--05Python基础+列表和元组

    1 list # 增 city = ["wuhan", "shanghai", "chongqing", "changsha&qu ...

  5. React Lifecycle

    React Lifecycle 分为三种: 初始化阶段 状态的更新 销毁 实例化: ReactDom.render 用于将模板转换成HTML语言,并插入DOM节点. 1.getDefaultProps ...

  6. linux 在后台常驻运行php脚本

    php a.php &

  7. 枚举转map

    import java.util.HashMap; import java.util.Map; public enum PayType { ALIPAY("支付宝扫码", 15), ...

  8. 关于WebService

    转自于:https://www.cnblogs.com/xdp-gacl/p/4048937.html 一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍 ...

  9. JAVA创建和销毁对象

    类静态方法取代构造方法创建对象 类静态方法有名称,可以通过名称说明返回的是什么类型的实例 可以控制是否需要新开辟内存空间 返回值是可以控制的 实体类属性非常多的时候使用build模式创建对象 单例实体 ...

  10. Java中的锁分类与使用

    1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁.读写锁等等,非常繁多,在此做一个总结.介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...