CN108595680B - Xbrl的缓存的实现方法 - Google Patents
Xbrl的缓存的实现方法 Download PDFInfo
- Publication number
- CN108595680B CN108595680B CN201810411299.8A CN201810411299A CN108595680B CN 108595680 B CN108595680 B CN 108595680B CN 201810411299 A CN201810411299 A CN 201810411299A CN 108595680 B CN108595680 B CN 108595680B
- Authority
- CN
- China
- Prior art keywords
- cache
- annotation
- data
- cached
- xbrl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了XBRL的缓存的实现方法,涉及XBRL系统中使用redis缓存和Spring AOP实现业务方法对缓存读取操作。包括以下内容:缓存操作接口和Redis实现类;缓存注解标记;缓存操作切面类;XBRL引用切面类并配置redis数据相关信息和声明切面JavaBean;在需要缓存数据具体业务方法使用标记。本发明降低了数据库查询和XML文件读取的压力,增加单位时间内系统的处理能力,提高了系统响应时间。使用户能快速的得到系统响应,增加了交互体验。
Description
技术领域
本发明属于财务自动化软件技术领域。涉及XBRL系统中使用redis缓存和SpringAOP实现业务方法对缓存读取操作,特别是在分类标准和实例文档中的具体应用,解决XBRL系统数据读取和处理效率较慢等问题。
背景技术
XBRL(eXtensible Business Reporting Language),可扩展商业报告语言是一门用于商业信息进行电子交换的语言,有助于商业信息的编制、分析和交换。XBRL技术框架分为XBRL规范、XBRL分类标准和XBRL实例文档三部分。其中涉及大量的元素读取和XML文件操作,在之前XBRL平台中是直接进行数据库和文件操作,而这种数据库和文件操作受到磁盘性能的影响,目前大多数服务器采用机械硬盘,,机械硬盘一般读写速度为60-120M/s,因此文件越小越多速度越慢,这成为处理大量的数据库和文件操作任务的瓶颈。传统的解决方案是使用缓存技术对系统修改频率较高的数据进行缓存,而目前系统主要业务逻辑已经趋于稳定,如果使用传统的缓存添加方法就会破坏原有的业务逻辑,带来一定的缺陷和风险。
原有XBRL系统中存在问题:
首先介绍原有XBRL系统中性能瓶颈,经过分析在分类标准和实例文档中存在大量的连表查询和XML文件操作,这些操作非常耗时且消耗的服务器资源巨大。例如在分类标准中查询国标元素,数据总量为1万条查询时间大于1分钟,而且这种操作很频繁。这就造成其他很多任务等待该查询的执行,降低系统处理性能,增加了数据库系统负担。所以急需在数据库之上覆盖一层缓存,将大量的不频繁修改的数据在内存中进行缓存,来降低数据库系统的压力。
缓存框架选取和使用弊端:
系统缓存中间件市面上具有很多种类,我们主要考察ehcache、memcache、redis这三种缓存产品,通过信息收集和分析,对以上的三种产品进行比较如下:
综合分布式集群和数据类型的考虑,选择使用redis作为缓存方案。在对现有的XBRL系统进行缓存改造时,我们经常遇到如下两场景:
第一对于单条数据查询步骤:①首先根据参数拼装出一个缓存Key;②根据缓存Key查询缓存;③如果缓存未命中,则查询数据库或HTTP调用或进行RPC远程调用获取数据;如果缓存命中则直接读取缓存数据;④如果未命中,读取到数据之后需要写入缓存然后返回给调用者。
第二对于批量数据查询步骤:①首先根据传入的参数列表,进行遍历并组装缓存Key;②根据缓存Key查询缓存;③遍历查询结果查询那些数据未被缓存,那些数据已经缓存;④查询数据库或HTTP调用或进行RPC远程调用获取未被缓存的数据;⑤将未被写入缓存的数据添加到缓存;⑥为调用者返回数据查询结果。
上面的这几个步骤非常简单,但是在具体实施过程中却很难。因为添加缓存的方法模式一致且步骤繁琐,如果每个需要缓存数据的方法都需要这么操作,那么会产生如下几个问题。第一:破坏了原有的正确的业务逻辑,可能产生新的错误;第二:添加缓存的方法太多,工作量巨大且繁琐;第三:不同的开发人员命名缓存Key,缓存Key不便于管理且可能出现Key的冲突;第四:可扩展性差,如果以后出现性能更加好缓存服务,需要替换以前的缓存服务或者由于以后服务性能提高,减少或者移除缓存使用,则都会面临项目较大改动。
发明内容
本发明的目的是如何在现有的XBRL平台上,在不影响原有的业务流程代码的情况下,通过对系统扩展缓存功能,来降低系统数据库和磁盘IO读取操作次数和系统等待时间,从而提高系统的项目运行速度和单位时间内的任务作业量。
为了达到上述的技术效果,本发明采取以下技术方案:
XBRL的缓存的实现方法,包括以下内容:
缓存操作接口和Redis实现类;
缓存注解标记;
缓存操作切面类;
XBRL引用切面类并配置redis数据相关信息和声明切面JavaBean;
在需要缓存数据具体业务方法使用标记。
进一步的技术方案是:使用高速存取性能的redis数据作为缓存中间件存储数据,对缓存的数据进行存取。
进一步的技术方案是:使用面向切面编程的方法将核心关注点和横切关注点进行分离。
进一步的技术方案是:使用Spring AOP注解的方式使用缓存功能,创建缓存操作注解。
本发明将缓存处理方法和原有的业务逻辑进行分离,在执行业务逻辑处理之前调用动态执行缓存操作方法。这样就有效的避免上述的问题,而这种处理方法就是使用面向切面编程思想。XBRL项目是基于Spring框架构建,而Spring框架默认实现一套非常实用的AOP模式,Spring框架中的AOP实现主要基于XML配置文件和注解两种方式实现。XML配置方式是需要在项目Spring配置文件中申明每一个方法的切面,配置较为繁琐,而且方法较多时配置不易于管理。注解方式需要首先创建缓存读取和删除的注解,在需要使用缓存的业务逻辑方法上打上该注解标记既可。综上所述选择注解的方式来实现缓存的动态添加,具体的实现原理如下。
首先将缓存相关的业务代码进行抽取,经过使用过程的总结发现,缓存接口操作主要有,根据Key读取缓存数据、写入缓存数据、根据Key删除缓存数据。并对缓存方法进行具体实现,具体实现使用jedis(jedis:Java操作redis的客户端程序)提供的API进行操作。
其次创建注解标签和切面。注解是JDK1.5引入的一种新特性,与类、接口在同一层次,用于对元素进行说明和注释。创建缓存注解类和缓存过期注解类,并申明其中所属的特性;在Spring AOP中对横切关注点的抽象就是切面,对业务数据的读取写入缓存的操作就是切面,在XBRL中定义一个类作为为切面,并实现缓存读取和写入的注解方法,缓存读取是发生在业务逻辑代码执行之前、而缓存写入发生在执行业务逻辑方法之,所以采用SpringAOP的@Around通知类型,保证在业务逻辑代码执行前后动态织入缓存操作。而缓存移除则需要拼装缓存Key之后执行所以采用@After通知类型。
最后在项目中使用缓存则变的相当简单,步骤如下:①在项目的Spring配置文件中配置redis连接池参数并申明切面类,便于Spring注入当前的切面类;②在确定要使用缓存的方法打上缓存注解即可;③在执行完毕移除缓存的方法上打上移除缓存注解即可。
本发明与现有技术相比,具有以下的有益效果:针对使用缓存技术和面向切面编程技术,来解决不修改原有业务逻辑的情况下实现系统缓存添加。本发明降低了数据库查询和XML文件读取的压力,增加单位时间内系统的处理能力,提高了系统响应时间。使用户能快速的得到系统响应,增加了交互体验。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在XBRL项目中实现缓存框架主要通过以下5个步骤实现,下面详细描述本发明的具体实施方案:
1.缓存操作接口(ICache)和Redis实现类(RedisPoolCache)
首先创建统一的缓存操作接口ICache用于统一所有的缓存产品的实现方法,ICache接口中方法的具体说明如下:
该接口统一缓存框架操作方法,为了保持通用性拥有的接入XBRL项目的缓存产品必须要实现该接口,redis产品的具体操作类RedisPoolCache也需要实现该接口。并使用redis提供的API实现接口定义的功能。redis具体实现采用jedis-2.6.2jar提供的API其中主要使用的方法有:
2.缓存注解标记设计与实现
设计缓存的使用的注解标记,在XBRL项目中我们设计三种缓存注解,分别是Cached、CacheKey、Invalidate。
Cached注解表示该方法需要在执行之前经过缓存切面类中的方法;Cached注解包括的属性有:prefix(缓存key前缀,默认为空)、expire(缓存过期时间,默认为空)、separator(缓存前缀与CacheKey之间的分隔符,默认为空)。
CacheKey注解表示使用该方法的参数构造缓存Key,封装了Key的拼装/解析规则;Cached注解包括的属性有:prefix(指定Key的前缀目的是防止key冲突,默认为空),expression(Spring表达式语言用于JavaBean的参数类型,可以指定Bean的某个属性作为Key,默认为空),multi(指明该方法是否走批量缓存操作,默认为false)。
Invalidate注解表示该缓存失效。包括的属性为prefix(缓存key前缀,默认为空),separator(缓存前缀与CacheKey之间的分隔符,默认为空)。
3.缓存操作切面类(CacherAspect)
CacherAspect类为缓存的AOP切面,封装所有需要经过缓存方法的通知,其中包括了缓存读取方法Object readCache(ProceedingJoinPoint jp),缓存移除方法voidremoveCache(JoinPoint jp)两个重要的方法实现。
readCache方法是对应使用Cached注解的操作,实现业务是逻辑根据Cached和CacheKey注解获取并组装Key并判断是否为批量查询,然后调用read方法查询redis数据库。如果存在该key数据则返回,否则查询数据库或HTTP调用或进行RPC远程调用获取数据,并调用write方法将数据写入到redis数据库并返回。由于该切面在目标方法执行前和执行完成均要织入新操作,所以该方法为Spring AOP中环绕通知类型即@Around,并且该通知只有在使用Cached注解才会使用,所以需要为该通知声明的切入点表达式为:
@Around("@annotation(com.xbrl.cacher.annotation.Cached)")。
removeCache方法是对应Invalidate注解的操作,是移除redis数据库中的缓存数据。该方法实现逻辑是根据Cached和CacheKey注解获取并组装Key值,并判断是否为批量删除操作,如果是批量删除操作则调用remove方法传入Key的数组,如果是单个元素操作则调用remove方法传入Key即可。removeCache方法是在当用户使用Invalidate注解才会使用,而且一般是在目标方法执行完毕调用,则使用Spring AOP中后置通知类型即@After,该通知声明的切入点表达式为:@After("@annotation(com.xbrl.cacher.annotation.Invalidate)")
4.XBRL引用切面类并配置redis数据相关信息和声明切面JavaBean
项目中要使用该模块需要有如下步骤,①项目中引用CacherAspect、和相关注解类;②在项目Spring配置文件中配置redis数据库信息,如host(redis数据库IP地址)、port(redis数据端口)、maxTotal(最大连接数)、waitMillis(最大等待时间);③声明CacherAspect切面的JavaBean,安装Spring IOC注入该JavaBean即可。
5.在需要缓存数据具体业务方法使用标记
在使用该缓存时就非常简单,确定哪些方法耗费资源且数据变动不频繁就可以走缓存提供性能,然后引用该模块,在需要走缓存的方法声明上写上Cached注解并按照需求指定相关参数,如果需要将方法参数作为Key参与计算则在参数上指明CacheKey标签即可。当用户调用该方法前就会先经过切面CacherAspect类中的readCache方法读取缓存,如果存在则读取缓存返回数据,如果不存在则查询数据库或HTTP调用或进行RPC远程调用获取数据,并将数据写入缓存,便于下一次查询,在返回数据。如果需要清空缓存则需要,声明一个方法,构造所需的参数,并打上Invalidate标签即可。
尽管这里参照本发明的解释性实施例对本发明进行了描述,但是,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。更具体地说,在本申请公开的范围内,可以对主题组合布局的组成部件和/或布局进行多种变型和改进。除了对组成部件和/或布局进行的变型和改进外,对于本领域技术人员来说,其他的用途也将是明显的。
Claims (3)
1.XBRL的缓存的实现方法,其特征在于,包括以下内容:
缓存操作接口和Redis实现类;
缓存注解标记;所述缓存注解包括CacheKey、Cached和Invalidate,CacheKey注解表示使用该方法的参数构造缓存Key,封装了Key的拼装/解析规则;Cached注解包括的属性有:prefix,expression,multi;multi指明该方法是否走批量缓存操作,默认为false;expression为Spring表达式语言用于JavaBean的参数类型,能指定Bean的某个属性作为Key,默认为空;Invalidate注解表示该缓存失效;
缓存操作切面类;所述缓存操作切面类为缓存的AOP切面,封装所有需要经过缓存方法的通知,其中包括缓存读取方法Object readCache 、缓存移除方法voidremoveCache两个方法;使用面向切面编程的方法将核心关注点和横切关注点进行分离;
readCache方法是对应使用Cached注解的操作,实现业务是逻辑根据Cached和CacheKey注解获取并组装Key数据并判断是否为批量查询,然后调用read方法查询redis数据库;如果存在该key数据则返回,否则查询数据库或HTTP调用或进行RPC远程调用获取数据,并调用write方法将数据写入到redis数据库并返回;
removeCache方法是对应Invalidate注解的操作,是移除redis数据库中的缓存数据;该方法实现逻辑是根据Cached和CacheKey注解获取并组装Key值,并判断是否为批量删除操作,如果是批量删除操作则调用remove方法传入Key的字符串数组,如果是单个元素操作则调用remove方法传入字符串Key即可;
XBRL引用切面类并配置redis数据相关信息和声明切面JavaBean;
在需要缓存数据查询或删除业务时使用readCache方法或removeCache方法进行注解标记。
2.根据权利要求1所述的XBRL的缓存的实现方法,其特征在于:使用高速存取性能的redis数据作为缓存中间件存储数据,对缓存的数据进行存取。
3.根据权利要求1所述的XBRL的缓存的实现方法,其特征在于:使用Spring AOP 注解的方式使用缓存功能,创建缓存操作注解。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810411299.8A CN108595680B (zh) | 2018-05-02 | 2018-05-02 | Xbrl的缓存的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810411299.8A CN108595680B (zh) | 2018-05-02 | 2018-05-02 | Xbrl的缓存的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108595680A CN108595680A (zh) | 2018-09-28 |
CN108595680B true CN108595680B (zh) | 2021-10-01 |
Family
ID=63620603
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810411299.8A Active CN108595680B (zh) | 2018-05-02 | 2018-05-02 | Xbrl的缓存的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108595680B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109962814A (zh) * | 2019-03-29 | 2019-07-02 | 山东浪潮云信息技术有限公司 | 一种微服务开发框架的日志捕获与处理方法 |
CN110909008A (zh) * | 2019-11-15 | 2020-03-24 | 政采云有限公司 | 一种数据获取方法、装置以及相关设备 |
CN110895539A (zh) * | 2019-11-22 | 2020-03-20 | 南威软件股份有限公司 | 一种应用系统的二级缓存方法 |
CN111352957A (zh) * | 2020-02-25 | 2020-06-30 | 京东数字科技控股有限公司 | 远程字典服务优化方法及相关设备 |
CN112181804B (zh) * | 2020-08-31 | 2023-09-08 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4764880A (en) * | 1986-01-09 | 1988-08-16 | Gerber Garment Technology, Inc. | Compound plotting apparatus and related method of operation |
CN103257859A (zh) * | 2013-03-22 | 2013-08-21 | 南京信通科技有限责任公司 | 高性能缓存和nutz的aop技术在教育网站群的应用 |
-
2018
- 2018-05-02 CN CN201810411299.8A patent/CN108595680B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4764880A (en) * | 1986-01-09 | 1988-08-16 | Gerber Garment Technology, Inc. | Compound plotting apparatus and related method of operation |
CN103257859A (zh) * | 2013-03-22 | 2013-08-21 | 南京信通科技有限责任公司 | 高性能缓存和nutz的aop技术在教育网站群的应用 |
Non-Patent Citations (1)
Title |
---|
AOP加自定义注解实现redis注解缓存;zhengholien;《https://blog.csdn.net/zhengholien/article/details/79155706》;20180124;1-5 * |
Also Published As
Publication number | Publication date |
---|---|
CN108595680A (zh) | 2018-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595680B (zh) | Xbrl的缓存的实现方法 | |
JP4814628B2 (ja) | データ・アクセス・レイヤー・クラス・ジェネレータ | |
CA2627270C (en) | System and method for displaying data on a thin client | |
AU2006304109C1 (en) | Managing relationships between resources stored within a repository | |
US8291310B2 (en) | Delta-saving in XML-based documents | |
JP4897246B2 (ja) | アイテムストア用のアンチウイルス | |
US20100205206A1 (en) | System and method for displaying data on a thin client | |
US8645502B2 (en) | Dynamic interface to read database through remote procedure call | |
WO2007136507A1 (en) | Efficient piece-wise updates of binary encoded xml data | |
EP2947582A1 (en) | Computing device and method for executing database operation command | |
CN108038213A (zh) | 一种数据处理的方法、客户端、服务器及系统 | |
CN111324619B (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
US20100251227A1 (en) | Binary resource format and compiler | |
RU2452017C2 (ru) | Обработка форматированных сообщений с использованием карты сообщения | |
US7562286B2 (en) | Apparatus, system, method and computer program product for document management | |
US8327324B1 (en) | Message logging system | |
EP1231547B1 (en) | System and method for mapping structured documents to structured data of program language and program for executing its method | |
US8667390B2 (en) | Asynchronous access to structured data | |
CN112883088B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN112395437B (zh) | 一种3d模型的加载方法、装置、电子设备及存储介质 | |
US20200301922A1 (en) | Multiform persistence abstraction | |
CN106802922B (zh) | 一种基于对象的溯源存储系统及方法 | |
US20060004838A1 (en) | Sharing large objects in distributed systems | |
US11222003B1 (en) | Executing transactions for a hierarchy of data objects stored in a non-transactional data store | |
KR20040077535A (ko) | 선택된 객체에 관한 정보에 대한 요구를 생성하는 시스템및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |