本发明专利技术公开了一种线程级的本地数据快速存取方法,包括:当用户通过本地缓存进行数据存取时,使用API模块提供的方法;API模块在接收到操作方法的指令后,API模块首先会读取缓存管理模块中的缓存配置参数,根据缓存配置参数对缓存方法内部的参数进行初始化;在配置参数初始化完成后,API模块会根据缓存的类型,将缓存数据存入对应的内存区域;由一个后台线程对内存中的数据进行持久化,根据存入数据时的缓存配置参数,以异步的方式将内存数据flush至磁盘,线程级缓存数据其生命周期与线程本身保持一致,随着线程的结束将自动释放。本发明专利技术利用本地内存,进一步提升了缓存数据的存取速度,在Redis等二级缓存之上加上本地缓存,让系统具备更强的处理能力。统具备更强的处理能力。统具备更强的处理能力。
【技术实现步骤摘要】
一种线程级的本地数据快速存取方法及其设备
[0001]本专利技术涉及线程级的本地数据快速存取设备领域,具体涉及一种线程级的本地数据快速存取方法及其设备。
技术介绍
[0002]目前,随着业务的不断发展,系统的用户数、访问量、并发数越来越高,业务系统需要承载的压力越来越大,由于分布式技术越来越成熟,更多的系统采用水平扩展的方式提升整体的处理性能。但是在底层的数据存储端,局限于业务场景和技术选型限制,业务处理通常选择关系型数据库,而关系型数据库底层是通过文件来处理数据的,因此最终的瓶颈不是应用本身,而是应用所选择的数据库。
[0003]现在市面上也有非常多的基于内存的数据库,比如Redis、Memcached等,通常在进行架构设计时,会将上述的内存数据库作为二级缓存,作为对数据库的缓冲,这种架构设计在一定程度上能够减轻数据库的压力,提升系统处理性能。但是也存在网络开销、数据库性能瓶颈等问题,虽然能够利用分布式技术有一定的改善,但是也存在一定的局限性。
[0004]在现代计算机中,CPU寄存器的存取速度是最快的,然后是内存,最后才是磁盘,但是CPU的存储容量有限,不适合业务系统可能需要存储大量数据的需求,因此内存成了很多业务系统在进行性能优化时的突破口,比如上面提到的内存数据库就是基于内存实现的快速存取,但是内存数据库也存在前面讲的一些缺点,因此就诞生了另一个概念,就是本地缓存。顾名思义,本地缓存就是利用本地的内存作为数据存储,因为是本地内存,也就不存在网络开销等问题,并且因为是本地内存,操作灵活性上更有优势,可以随意定制内存的存取方式,线程级的本地数据快速存取技术就是基于线程和本地内存而诞生的一项技术。
[0005]主流的基于内存的数据库包括Redis、Memcached等,这些数据库都是基于内存实现的,具备高速存取能力,采用KV数据格式,非常适合作为二级缓存,存在于应用程序和数据库之间,给数据库减轻压力。但是,内存数据库也存在一定的局限性,包括以下几点:1.相比于本地内存来说,访问外部内存需要进行RPC调用,具备一定的网络开销,特别是当网络不稳定时,容易出现访问超时的情况。
[0006]2.数据存取性能完全取决于外部数据库的配置,在高并发场景下,一旦外部存储宕机,将使整个缓存失效,引起缓存雪崩,最终使数据库被打垮。
技术实现思路
[0007]本专利技术针对上述问题,提出了一种线程级的本地数据快速存取方法,解决了现有的数据快速存取方法当网络不稳定时,容易出现访问超时的情况,在高并发场景下,一旦外部存储宕机,将使整个缓存失效,引起缓存雪崩,最终使数据库被打垮的缺陷。
[0008]本专利技术采取的技术方案如下:一种线程级的本地数据快速存取方法,包括:当用户通过本地缓存进行数据存取时,使用API模块提供的方法;
API模块在接收到操作方法的指令后,API模块首先会读取缓存管理模块中的缓存配置参数,根据缓存配置参数对缓存方法内部的参数进行初始化;在配置参数初始化完成后,API模块会根据缓存的类型,将缓存数据存入对应的内存区域;由一个后台线程对内存中的数据进行持久化,根据存入数据时的缓存配置参数,以异步的方式将内存数据flush至磁盘,线程级缓存数据其生命周期与线程本身保持一致,随着线程的结束将自动释放。
[0009]本专利技术通过本专利技术对数据的存取,充分利用了本地内存进一步提升了数据的存取性能。
[0010]本专利技术引入应用级缓存的概念,在应用内部开辟一款空间,内部的数据应用内共享,并通过程序本身的同步机制保证多线程场景下数据同步问题。本专利技术解决了“相比与本地内存来说,访问外部内存需要进行RPC调用,具备一定的网络开销,特别是当网络不稳定时,容易出现访问超时的情况。且数据存取性能完全取决于外部数据库的配置,在高并发场景下,一旦外部存储宕机,将使整个缓存失效,引起缓存雪崩,最终使数据库被打垮”的技术问题。
[0011]现有的整个库的数据作用域是应用级的,也就是整个应用共享整个库的数据,在多线程场景下,会出现数据同步问题,通常情况下需要借助第三方的分布式事务框架。本专利技术充分利用本地内存的快速存取特点,进一步提升系统的处理性能,从而应对更高级别的并发场景。本专利技术中本地缓存除了基本的读写功能外,还提供了数据淘汰策略、持久化、统计监控、缓存最大限制等功能,并且对外暴露了API,外部系统可方便的对这些功能进行集成。
[0012]本专利技术还公开了一种线程级的本地数据快速存取设备,包括:一存储模块;所述存储模块用于存放缓存中的数据;一内存空间区域模块;所述内存空间区域模块包括应用共享区和线程独占区;缓存管理模块;所述缓存管理模块用于对缓存数据管理,所述缓存管理模块包括缓存数据淘汰策略单元、持久化功能单元、统计监控单元和缓存配置单元;以及一应用程序编程接口模块。
[0013]可选的,所述应用共享区主要用来存放应用级缓存数据,应用内部共享一份;所述线程独占区主要用来存放线程级的缓存数据。
[0014]可选的,所述淘汰策略单元用于管理数据的有效性。
[0015]可选的,所述缓存管理模块会根据制定的淘汰策略,对缓存内的数据进行标记,并在适当的时机对无效数据进行清理,保障内存空间在合理区间内。
[0016]可选的,所述持久化单元用于将内存中的数据持久化至硬盘中或者其他存储中,使得当应用重启时能够将本地缓存数据重新加载到内存中。
[0017]可选的,所述缓存配置单元包含缓存的整体容量、缓存数据大小限制、缓存个数等缓存相关的配置项。
[0018]可选的,所述统计监控用于对缓存使用的监控,包括缓存命中率、未命中率、加载数据时间、淘汰缓存数等指标,让使用者能够对本地缓存机械能较完整的监控。
[0019]本专利技术利用本地内存,进一步提升了缓存数据的存取速度,在Redis等二级缓存之
上加上本地缓存,让系统具备更强的处理能力,提升系统的QPS。
[0020]本专利技术提供了线程级的数据缓存,使得缓存数据变成线程独占,避免了多线程情况下的数据同步问题,同时提升了内存的利用率。
[0021]本专利技术避免了因为使用Redis等外部缓存时存在的网络抖动和网络延迟,使数据存取的延迟更小。
[0022]本专利技术提供了缓存管理器,通过缓存管理器暴露的接口,使内存的管理更直观、更方便,让内存数据不在是黑盒。
[0023]本专利技术通过API提供的接口,能够非常方便的集成本地缓存和使用本地缓存。
[0024](三)有益效果1、本专利技术对数据的存取,充分利用了本地内存进一步提升了数据的存取性能。
[0025]2.本专利技术引入应用级缓存的概念,在应用内部开辟一款空间,内部的数据应用内共享,并通过程序本身的同步机制保证多线程场景下数据同步问题。
[0026]3.本专利技术引入线程级缓存的概念,为线程专门开辟内存空间,整个生命周期与线程的生命周期保持同步,主要记录线程中的过程数据,充分使用内存,提升性能。
[0027]4.本专利技术充分利用本地内存本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种线程级的本地数据快速存取方法,其特征在于,包括:当用户通过本地缓存进行数据存取时,使用API模块提供的方法;API模块在接收到操作方法的指令后,API模块首先会读取缓存管理模块中的缓存配置参数,根据缓存配置参数对缓存方法内部的参数进行初始化;在配置参数初始化完成后,API模块会根据缓存的类型,将缓存数据存入对应的内存区域;由一个后台线程对内存中的数据进行持久化,根据存入数据时的缓存配置参数,以异步的方式将内存数据flush至磁盘,线程级缓存数据其生命周期与线程本身保持一致,随着线程的结束将自动释放。2.一种线程级的本地数据快速存取设备,其特征在于,包括:一存储模块;所述存储模块用于存放缓存中的数据;一内存空间区域模块;所述内存空间区域模块包括应用共享区和线程独占区;一缓存管理模块;所述缓存管理模块用于对缓存数据管理,所述缓存管理模块包括缓存数据淘汰策略单元、持久化功能单元、统计监控单元和缓存配置单元;以及一应用程序编程接口模块。3.如权利要求1所述的一种线程级的本地数据快速存取设备,其特征在于,所述应用共享区主要...
【专利技术属性】
技术研发人员:周志凯,钟君凯,王雯,王东旭,王宁,罗康建,
申请(专利权)人:杭州数政科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。