CN113836162A - 一种业务解耦并实现多级缓存的自动化更新的方法及装置 - Google Patents

一种业务解耦并实现多级缓存的自动化更新的方法及装置 Download PDF

Info

Publication number
CN113836162A
CN113836162A CN202111354429.7A CN202111354429A CN113836162A CN 113836162 A CN113836162 A CN 113836162A CN 202111354429 A CN202111354429 A CN 202111354429A CN 113836162 A CN113836162 A CN 113836162A
Authority
CN
China
Prior art keywords
cache
data
version
service
updating
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.)
Pending
Application number
CN202111354429.7A
Other languages
English (en)
Inventor
张爱平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hubei Chujianyi Network Technology Co ltd
Original Assignee
Hubei Chujianyi Network Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hubei Chujianyi Network Technology Co ltd filed Critical Hubei Chujianyi Network Technology Co ltd
Priority to CN202111354429.7A priority Critical patent/CN113836162A/zh
Publication of CN113836162A publication Critical patent/CN113836162A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

针对现有缓存技术中存在的痛点,本发明的目的是提供一种多层缓存方法:第一层为进程内缓存空间,第二层为进程外本地缓存,第三层为远程缓存;提供一致的调用方法让业务系统根据业务数据大小及读取、更新频率,灵活使用对应层级的缓存或者组合使用。并且多级缓存更新与业务解耦,引入缓存数据的独有命名空间结构,定义并存储不同层级(表、字段、字段值等)数据元素的版本号,实现缓存的读写分离,支持了任意复杂的业务场景(跨库跨表、分页查询等)。数据的写更新只影响缓存的版本号,读数据判断缓存版本即可实现缓存的自动更新,解决了缓存的多级架构混合使用的技术问题,实现了数据多级缓存的实时同步更新,通过独立的缓存组件与业务代码逻辑实现解耦,提升了缓存的读取性能,确保了缓存的强一致性。

Description

一种业务解耦并实现多级缓存的自动化更新的方法及装置
技术领域
本发明涉及软件开发技术领域,尤其涉及一种多级缓存混合使用(进程缓存、单机缓存、分布式缓存)场景下的复杂业务支撑及实时更新的方法及装置。
背景技术
现有软件开发领域,应用开发使用的缓存通常采用进程内缓存或者进程外缓存两种方式。进程内缓存是数据存储在应用服务的进程内的缓存;进程外缓存则反之,进程外缓存根据缓存服务相对应用的网络地址分为本地缓存(与应用同一ip地址)和远程缓存(与应用不在统一ip地址),大型应用或者集群软件通常采用远程分布式缓存。缓存数据的更新策略通常采用两种方式:基于时间的过期策略(为缓存数据设置一个有效时间,时间到后数据自动失效)、基于键值依赖的策略(数据更新时在应用中的业务逻辑编写代码触发缓存键值失效或者更新键值缓存的内容数据,这个过程也可以使用异步操作)。上述技术的问题如下:
1.进程内缓存(图1:进程内缓存结构示意图):
其最大的优点是应用和 cache 是在同一个进程内部,缓存请求非常快速,没有多余的网络开销;它的缺点是缓存跟应用程序耦合太深,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费;进程内缓存通常适合小数据量的定时缓存,不支持实时更新场景。
进程外缓存(图2:进程外缓存结构示意图):
其优点是可以较好的支持多节点的数据一致性,缺点是相对进程内缓存多了网络通信开销,大文本的传输、大并发数据的传输的网络IO占用大。
更新策略的局限性:
进程内缓存与进程外缓存目前的两种缓存更新策略不能满足复杂业务场景下的数据实时更新的需求。基于时间过期的策略无法处理实时性要求高的业务逻辑;基于键值依赖的更新策略缺点是缓存更新与业务代码严重耦合,需要代码层面解决数据更新的逻辑功能实现,并且不能解决复杂数据的缓存更新,比如多库多表sql关联查询的数据,理论上其中一个库表的数据变动,就需要更新包含相关库表的所有sql语句查询的缓存,现实中业务编码是做不到的。再比如大表分页数据的有序缓存,理论上其中一条记录增删变动,会导致记录的所有排序有变动,需要更新所有分页。这也是传统代码编写功能更新无法做到的。这些情况大大限制了缓存的使用场景与范围。另外传统缓存使用无法应对频繁更新的数据,这种情况缓存命中率急剧下降。
缓存数据的一致性:
进程内缓存都是节点各自处理自己的缓存,缓存数据过期时效不一致,缓存数据不一致。进程外缓存有较好的数据一致性,但需要防范数据脏读的可能性,需要业务层面实现一个全局事务或者分布式锁来完成缓存和数据库的更新,才能避免产生脏数据。而采用全局事务或者分布式锁会增加业务逻辑的复杂度并降低了软件业务的响应实时性与运行性能。
应对缓存潜在风险的能力:
目前的缓存设计通常无法简单有效的防范缓存穿透、缓存击穿、缓存雪崩等风险。如需解决相关风险依赖在应用软件中编写格外的业务逻辑处理。
发明内容
针对上述技术中存在的缺陷及痛点,本发明的目的是通过提供一种多层缓存结构,第一层为进程内缓存空间,第二层为进程外本地缓存,第三层为远程缓存;然后结合缓存业务组件根据数据大小及读取、更新频率,灵活使用对应层级的缓存。多级缓存更新与业务解耦,引入数据元素的命名空间版本库,定义并存储数据元素的版本号,实现缓存的读写分离。数据的写更新只影响缓存的版本号,读数据判断缓存版本即可实现缓存的自动更新。解决了缓存的多级混合使用的技术问题,实现了多级缓存均支持数据的同步实时更新;实现缓存组件独立并且功能通用,代码逻辑实现解耦,提升缓存的读取性能。
为达到上述目的,本发明的技术方案是:设计一种多级缓存的装置(图3:多级缓存结构示意图),特征在于:缓存有三级,第一级是进程内缓存(Process Cache),每个web服务都有自己专属的进程内存。第二级是本地缓存(Local Cache),位于web服务所在的宿主机,是一个多个web服务可以共享使用的内存空间。第三级是进程外远程缓存(Remote Cache),是多台服务器的多个web服务均可共享使用的内存空间。Web应用读取第一级缓存是直接读取,读取第二级缓存是创建本地网络连接,读取是第三级是创建需要网关中转的网络连接。
在上述装置中存在一个缓存命名空间(图4:关系数据库的数据映射缓存命名空间版本库的装置及规则)的结构,用于存储数据库数据的版本号,通过业务关系数据库的事件触发或者类似binlog的日志解析等方法实现了业务数据的自动版本化。
在上述装置中缓存命名空间是一系列键值对的集合,key是字符串类型,value是64位的整数,默认为0,其值只能自增,每次加一。
在上述装置中版本号的key由数据库的库、表、字段及值自动生成无需业务接入;匹配规则为,库名、表名、字段名结合字段值进行组合。数据库的插入、更新、删除操作都会触发对应库表生成key的值自增1,表示该数据元素的版本号为1。表的版本key为:db:table:all,字段的版本号为:db:table:field:all。默认只触发表及字段的版本。如果业务需要可以配置字段值的版本,字段值的版本key为:db:table:field:md5(md5为value的md5)。字段值级别的版本号缓存意义是可以提供更细粒度的缓存命中判断,降低缓存更新的阀值提升缓存命中率。
上述定义的版本key的值与范围有关联关系:数据表的版本db:table:all,表的任何记录变动、结构变动均会触发该表版本自增;字段的版本:db:table:field:all,该字段的值变动(新增值、修改值、删除值)会触发字段版本,同时也会更新表版本;字段值版本:db:table:field:md5,只有当前记录md5值的记录修改才会更新,同时会更新该字段的版本号、该字段所属表的版本号。所以:表的版本号>字段的版本号>字段值的版本号。对应的数据缓存的范围也一致,如果是查询全表的数量之类的查询,版本查询的条件就是用表级别的版本条件;如果查询某个字段的数量及计算,则版本查询的条件使用字段级别的版本;如果是查询某条记录的具体值,比如查询用户id=1的用户的个人信息,则版本查询的条件使用用户表的用户id=1的字段值的版本,这种情况下,其他用户的个人信息变动,均不会触发id=1的用户字段值的缓存失效。只有当用户id=1的用户资料修改时才会触发更新该用户的字段值版本号,从而命缓存失效并实时更新。
如果一个库表目前还没有触发过版本同步事件,它默认的数据初始版本号为0。
缓存命名空间的版本号数据并不需要可靠的持久化存储,可以使用高速内存nosql存储。重启缓存命名空间的版本号库后,会自动初始化版本号,不影响业务缓存更新。这个设计特性降低了缓存命名空间的技术门槛,可以使用流行的开源缓存软件灵活搭建该服务。
在上述装置中使用了一个自定义的数据缓存的版本化结构(图5:数据缓存的版本化结构),缓存根目录是key、value键值对,value由version数据和data内容数据两部分组成。Version数据是当前缓存的当前版本号,允许有多个条件的版本号;Data数据是业务数据的缓存内容,可以是字符串文本、数组、对象等(不限格式,使用语言支持均可)。
在上述装置中存在一个业务缓存组件(图6:业务缓存组件结构),这个组件是业务缓存功能的抽象,独立在业务功能之外的通用功能。
业务缓存组件提供不同的方法访问不同级别的缓存,比如processCache方法访问第一级缓存,localCache方法访问第二级缓存,remoteCache方法访问第三级缓存。每一级的缓存方法,支持两种缓存,一是定时缓存,二是实时更新缓存;由开发人员根据业务数据特点灵活决定使用。定时缓存不需要传递缓存版本条件,传递过期时间即可。实时更新缓存需要传递数据的版本缓存条件,条件是键值对,规则与缓存命名空间的键值对规则一致。
在版本自动更新缓存方法中,缓存方法首先自动生成缓存key,读取缓存节点判断是否存在缓存,同时读取缓存命名空间版本库得到当前版本条件的最新版本号。
如果判断缓存不存在,进入缓存更新流程回调传入的更新方法,读取数据库的对应库表取得业务数据,然后生成缓存的版本数据结构并写入缓存,最后同时返回业务数据。其中回调方法由业务功能提供,实现了功能、代码的解耦,支持任意复杂的查询或者分页数据的缓存,支持用户的各种业务场景,做到缓存组件的通用。
如果判断缓存存在并且缓存结构是正确的缓存版本数据结构,则开始比较当前数据版本号与最新版本号是否一致:判断当前版本条件与远程版本条件数量是否一致如果版本条件数量一致且都完全相等则返回缓存的内容;其它情况则进入上述缓存更新子流程。其中远程版本号为0情况不会触发更新。
当业务数据为空或者查询失败时,均会缓存一个null值。从而避免了对数据库的并发请求,避免了缓存击穿、缓存穿透、缓存雪崩等情况。
通过上述技术方案,数据库的数据自动映射了对应的数据版本号,版本号存储在缓存命名空间版本库中,缓存命名空间版本库可以采用内存型高效nosql数据库,可以应对高并发的查询,效率极高。所以应用这套缓存多节方法后,业务系统的大部分查询均在缓存层级及缓存命名空间层级,只有在版本号不一致的情况下才会查询关系数据库,从而实现了下述目标:
多层级缓存的组合使用:
1.业务组件隔离了多级缓存的区别,processCache方法、localCache方法、remoteCache方法访问不同级别缓存,需要更新的时候更新对应缓存级别;从而确保不同层级缓存均支持混合使用,都能根据当前缓存的版本号与缓存命名空间版本库的远程版本号对比来决定是否实时更新缓存,实现了多层级缓存的真正实时更新。
多层级缓存的强一致性:
实现多层级缓存的真正实时更新后,能完全确保多级缓存的强一致性。可以根据业务特点灵活决定使用哪一级缓存。
复杂业务场景的支持:
缓存读写分离的结构,实现了缓存与业务的解耦,从而支持跨库跨表、分页查询等各种复杂业务场景下的缓存实时更新。
缓存效率的提升:
相比单纯使用传统进程内缓存或进程外缓存,多级缓存通过不同层级的缓存搭配,大大提升缓存查询的效率(见图7:访问延迟对比);通过多级缓存,可以将小型字典数据放在第一级,大型文本缓存数据(通过网络传输io占用大)放到第二级,普通缓存放到第三级;这样搭配使用,内存占用、网络传输综合考虑,大大提升缓存的效率。
缓存命中率的提升:
数据表、数据字段级别的版本号可以提供字段级的初步缓存更新,缓存命名空间支持配置字段值级别的版本号,从而提供值级别的细粒度缓存。缓存更新的触发条件严格到具体值,实现了数据值的缓存版本号,是实时版本缓存的关键特性。更小的缓存粒度、更严的触发条件,提升了缓存请求的命中率。进一步降低了业务功能查询数据库的次数。
应对缓存潜在风险的能力提升:
传统缓存架构中大量不能命中的查询或不存在的key查询会造成缓存击穿,从而业务请求落到数据库查询上,大并发情况容易导致数据库崩溃。而当用缓存命名空间把数据库数据映射版本号后,空数据也会有版本号,避免了缓存穿透。而多级缓存架构,同一缓存在不同缓存级别有不同的缓存过期时间,不会同时过期,业务中可以设置较长的过期时间,甚至可以设置为永不过期,这样会大大降低甚至可以避免缓存击穿、缓存雪崩事件。
附图说明:
图1:进程内缓存结构示意图
图2:进程外缓存结构示意图
图3:多级缓存结构示意图
图4:关系数据库的数据映射命名空间版本库的装置及规则
图5:数据缓存版本化结构
图6:业务缓存组件结构
图7:多级缓存访问延迟。

Claims (3)

1.一种多级缓存结构方法及装置,其特征在于,包括:
多层缓存的结构,第一层为进程内缓存空间,第二层为进程外本地缓存,第三层为远程缓存。多节缓存提供一致的调用方法,共用相同的数据命名空间版本库。
2.该装置结构中缓存命名空间的定义规则及联动方法,其特征在于,包括:
2.1缓存命名空间是一系列键值对的集合,key是字符串类型,value是64位的整数,默认为0,其值只能自增;
2.2在上述装置中版本号的key由数据库的库、表、字段及值自动生成无需业务接入,自动匹配规则为:库名、表名、字段名结合字段值进行组合;
2.3数据库的插入、更新、删除操作都会触发对应库表生成key的值自增1;
2.4在上述装置中使用了一个自定义的数据缓存的版本化结构(图5:数据缓存的版本化结构)。缓存顶级是key、value键值对,value由version数据和data内容数据两部分组成。Version数据是当前缓存的当前版本号,允许有多个条件的版本号;Data数据是业务数据的缓存内容,可以是字符串文本、数组、对象等(不限格式,使用语言支持均可)。
3.该装置中的业务缓存组件的方法及装置,其特征在于,包括:
3.1业务缓存组件通过提供不同的方法访问不同级别的缓存,比如processCache方法访问第一级缓存,localCache方法访问第二级缓存,remoteCache方法访问第三级缓存;
3.2在版本自动更新缓存方法中,缓存方法首先自动生成缓存key,读取缓存节点判断是否存在缓存,同时读取缓存命名空间版本库得到当前版本条件的最新版本号;
3.3如果缓存存在并且结构是正确的缓存版本数据结构,则判断当前版本条件与远程版本条件数量是否一致;如果版本条件数量一致且都完全相等,这时返回缓存的内容。其它情况则进入下述缓存更新子流程(3.4);
3.4如果判断缓存不存在或者上述版本号不一致的情况(3.3)则进入缓存更新流程,回调传入的更新方法读取数据库的对应库表取得业务数据,然后生成缓存的版本数据结构并写入缓存,最后返回业务数据。其中回调方法由业务功能提供,实现了功能、代码的解耦,支持任意复杂的查询或者分页数据的缓存、支持任意的业务场景,做到缓存组件的通用;
3.5其中当业务数据为空或者查询失败时均会缓存版本号,从而避免了对数据库的并发请求,避免了缓存击穿、缓存穿透、缓存雪崩等情况。
CN202111354429.7A 2021-11-16 2021-11-16 一种业务解耦并实现多级缓存的自动化更新的方法及装置 Pending CN113836162A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111354429.7A CN113836162A (zh) 2021-11-16 2021-11-16 一种业务解耦并实现多级缓存的自动化更新的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111354429.7A CN113836162A (zh) 2021-11-16 2021-11-16 一种业务解耦并实现多级缓存的自动化更新的方法及装置

Publications (1)

Publication Number Publication Date
CN113836162A true CN113836162A (zh) 2021-12-24

Family

ID=78971220

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111354429.7A Pending CN113836162A (zh) 2021-11-16 2021-11-16 一种业务解耦并实现多级缓存的自动化更新的方法及装置

Country Status (1)

Country Link
CN (1) CN113836162A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023056946A1 (zh) * 2021-10-09 2023-04-13 上海淇馥信息技术有限公司 一种数据缓存方法、装置和电子设备
CN116186059A (zh) * 2023-04-24 2023-05-30 民航成都信息技术有限公司 航班数据的更新方法、系统、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023056946A1 (zh) * 2021-10-09 2023-04-13 上海淇馥信息技术有限公司 一种数据缓存方法、装置和电子设备
CN116186059A (zh) * 2023-04-24 2023-05-30 民航成都信息技术有限公司 航班数据的更新方法、系统、电子设备及存储介质
CN116186059B (zh) * 2023-04-24 2023-06-30 民航成都信息技术有限公司 航班数据的更新方法、系统、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US5519855A (en) Summary catalogs
KR100745883B1 (ko) 투명한 네트워크 에지의 데이터 캐시
US7136867B1 (en) Metadata format for hierarchical data storage on a raw storage device
US6502088B1 (en) Method and system for improved access to non-relational databases
US20020107835A1 (en) System and method for adaptive result set caching
EP0843267A2 (en) Processing multiple database transactions in the same process to reduce process overhead and redundant retrieval from database servers
CN102117309A (zh) 一种数据缓存系统和数据查询方法
US20040073867A1 (en) Precomputation of web documents
CN105556520A (zh) 在存储器中镜像盘中的数据以提高查询性能
CN105556519A (zh) 对oracle存储器中数据库的存储器中快照存储的多版本并行控制
CN108920600B (zh) 一种基于数据关联性的分布式文件系统元数据预取方法
JP2003006036A (ja) クラスタ化したアプリケーションサーバおよびデータベース構造を持つWebシステム
CN113836162A (zh) 一种业务解耦并实现多级缓存的自动化更新的方法及装置
CN101067820A (zh) 预取对象的方法
US20030204510A1 (en) Run-time access techniques for database images
US8793288B2 (en) Online access to database snapshots
US10990571B1 (en) Online reordering of database table columns
CN113420052B (zh) 一种多级分布式缓存系统及方法
CN102314506A (zh) 基于动态索引的分布式缓冲区管理方法
CN103365987B (zh) 一种基于共享磁盘架构的集群数据库系统及数据处理方法
US20080250017A1 (en) System and method for aiding file searching and file serving by indexing historical filenames and locations
KR101806394B1 (ko) 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법
CN110716940A (zh) 一种增量式数据存取系统
CN115374133A (zh) 数据处理方法、装置、电子设备和计算机可读存储介质
WO2003081464A2 (en) Database system comprising database access object with cache

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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20211224