CN116521745A - 一种缓存方法以及装置 - Google Patents
一种缓存方法以及装置 Download PDFInfo
- Publication number
- CN116521745A CN116521745A CN202310807434.1A CN202310807434A CN116521745A CN 116521745 A CN116521745 A CN 116521745A CN 202310807434 A CN202310807434 A CN 202310807434A CN 116521745 A CN116521745 A CN 116521745A
- Authority
- CN
- China
- Prior art keywords
- request
- graphql
- client
- key value
- function
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000012545 processing Methods 0.000 claims abstract description 99
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000004458 analytical method Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 abstract description 65
- 238000011161 development Methods 0.000 abstract description 6
- 238000004891 communication Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 8
- 238000012795 verification Methods 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 7
- 230000003139 buffering effect Effects 0.000 description 5
- 235000014510 cooky Nutrition 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 235000013405 beer Nutrition 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种缓存方法以及装置,属于通信技术领域。本申请根据GraphQL请求的请求方法和请求名称,判断是否需要缓存GraphQL请求,当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理,并对请求函数的处理结果进行缓存。如果相同的请求被频繁发起,从缓存中获取结果可以显著减少处理时间,提高响应速度。进一步地,避免了在接口调用的函数上进行缓存,而是在接口中直接进行缓存,缓存接口的缓存速度高,从而提升开发效率。
Description
技术领域
本申请各实施例属于通信技术领域,具体涉及一种缓存方法以及装置。
背景技术
在web应用***中,经常会出现一些需要对大量数据进行计算统计分析的操作,而这些数据的实时性要求并不高。
在传统的Restful接口下,由于几乎不存在强类型校验,因此很容易在接口调用的函数上将计算的结果进行缓存。
而在使用GraphQL接口下,由于存在强类型校验和大量的自定义类型,对其结果和输入参数进行序列化和反序列化就会十分繁琐,因此在接口调用的函数上进行缓存就十分困难,缓存接口的缓存速度低,从而导致开发效率低下。
发明内容
为了解决现有技术存在的在接口调用的函数上进行缓存就十分困难,缓存接口的缓存速度低,从而导致开发效率低下的技术问题,本发明提供了一种缓存方法及装置。
第一方面,本发明提供了一种缓存方法,包括:
接收客户端发起的HTTP请求,HTTP请求中包括GraphQL请求;
响应于HTTP请求,解析HTTP请求以获取客户端的用户信息;
根据用户信息对客户端进行认证;
当客户端认证通过时,解析GraphQL请求以获取GraphQL请求的请求方法和请求名称;
根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存GraphQL请求;
当不需要缓存GraphQL请求时,通过请求函数进行处理;
当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库;当数据库中存在Key值时,返回Key值对应的Value值;当数据库中不存在Key值时,通过请求函数进行处理;
根据请求函数的处理结果判断GraphQL请求是否存在错误,若是,向客户端返回请求函数的处理结果,并对请求函数的处理结果进行缓存;否则,向客户端返回错误提示。
第二方面,本发明提供了一种缓存装置,包括:
接收模块,用于接收客户端发起的HTTP请求,HTTP请求中包括GraphQL请求;
响应模块,用于响应于HTTP请求,解析HTTP请求以获取客户端的用户信息;
认证模块,用于根据用户信息对客户端进行认证;
解析模块,用于当客户端认证通过时,解析GraphQL请求以获取GraphQL请求的请求方法和请求名称;
判断模块,用于根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存GraphQL请求;
处理模块,用于当不需要缓存GraphQL请求时,通过请求函数进行处理;
查询模块,用于当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库;当数据库中存在Key值时,返回Key值对应的Value值;当数据库中不存在Key值时,通过请求函数进行处理;
缓存模块,用于根据请求函数的处理结果判断GraphQL请求是否存在错误,若是,向客户端返回请求函数的处理结果,并对请求函数的处理结果进行缓存;否则,向客户端返回错误提示。
与现有技术相比,本发明至少具有以下有益效果:
在本发明中,根据GraphQL请求的请求方法和请求名称,判断是否需要缓存GraphQL请求,当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理,并对请求函数的处理结果进行缓存。如果相同的请求被频繁发起,从缓存中获取结果可以显著减少处理时间,提高响应速度。进一步地,避免了在接口调用的函数上进行缓存,而是在接口中直接进行缓存,缓存接口的缓存速度高,从而提升开发效率。
附图说明
图1是本发明提供的一种缓存方法的流程示意图;
图2是本发明提供的一种缓存装置的结构示意图;
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都应当属于本申请保护的范围。
第一方面,参照图1,示出了本发明实施例提供的一种缓存方法的流程示意图。
本发明提供了一种缓存方法,包括:
S101:接收客户端发起的HTTP请求。
其中,HTTP请求中包括GraphQL请求。
其中,HTTP请求是客户端向服务器发送的请求消息,用于获取或传输数据。而GraphQL请求则是一种特定类型的HTTP请求,用于发送GraphQL查询、变更或订阅操作。GraphQL的优势在于提供了更高度的灵活性和效率。客户端可以精确地指定所需的数据,而不需要依赖服务器定义的固定端点。这减少了不必要的数据传输,提高了网络效率。同时,GraphQL还提供了自省能力,使得客户端可以动态地了解和适应服务器的能力。
S102:响应于HTTP请求,解析HTTP请求以获取客户端的用户信息。
可选地,通过解析HTTP请求的头部信息header中的Cookie、JWT Token等字段获取客户端的用户信息。
其中,Cookie是在HTTP协议中用于在客户端和服务器之间传递状态信息的一种机制。当客户端发送HTTP请求时,可以将相关的用户信息存储在Cookie中,并随请求一起发送到服务器。服务器在接收到请求后,可以解析Cookie中的值,获取用户信息。
其中,JWT Token是一种用于在客户端和服务器之间传递安全信息的开放标准。JWT通常被用作身份验证和授权机制,用于在请求中传递用户信息或访问权限。客户端在进行身份验证后,通常会收到一个包含用户信息的JWT Token。该Token是由服务器签发的,其中包含了经过加密或签名的用户数据。在后续的请求中,客户端需要将JWT Token作为请求的Authorization头部的Bearer Token字段发送到服务器。服务器可以解析JWT Token,验证其签名和有效性,并提取其中的用户信息。
S103:根据用户信息对客户端进行认证。
其中,根据用户信息对客户端进行认证的目的在于确认客户端是否为合法用户。通过对客户端进行认证并确定其是否为合法用户,可以提供更高的安全性、细粒度的访问控制,有助于保护用户数据和***安全。
具体而言,可以通过检查用户标识、校验权限、验证签名、密码验证和双因素验证的方式对客户端进行认证。
在一种可能的实施方式中,S103具体包括:
查询***内部的认证缓存模块是否记录有用户信息。
具体而言,可以将JWT内容作为Key到认证缓存模块中进行检索,以确认认证缓存模块是否记录有用户信息。
当认证缓存模块记录有用户信息时,确定客户端为合法用户,客户端认证通过。
当认证缓存模块未记录有用户信息时,对客户端进行JWT认证。
其中,JWT验证提供了一种简单、安全和可扩展的身份验证机制,可以用于保护API端点、实现单点登录(SSO)和构建分布式***中的身份验证和授权功能。
在一种可能的实施方式中,当认证缓存模块未记录有用户信息时,对客户端进行JWT认证,具体包括:
将存储有用户信息的JWT字段按照预设符号进行分段,分为Header信息、Payload信息和Verify Signature信息。
其中,预设符号可以是“.”。
其中,头部信息Header中包含本消息的类型(固定为jwt认证类型)和使用的加密算法(本***中加密算法是固定的),这两个信息在本发明中都是固定的,因此在实际应用过程中,无需对第一段进行解密,而是与一个固定值直接进行比较,如果不同则认定为非法用户。而载荷信息Payload和校验信息Verify Signature则需要进行后续的解密。
其中,载荷信息Payload中一般包含用户名和认证过期时间,***会将用户名与***数据库进行比较,如果不存在或过期都认定为非法用户。
其中,Verify Signature信息是使用私钥对头部和载荷进行签名生成的,用于验证消息的完整性和真实性。签名通常由头部中指定的签名算法和私钥生成。
将分段后的Header信息、Payload信息和Verify Signature信息分别进行解密。
具体而言,可以对分段后的JWT字段中的每一段单独进行base64解密。
对Header信息、Payload信息和Verify Signature信息依次进行校验。
其中,当头部信息Header、载荷信息Payload均认证成功的情况下,可以通过HMACSHA256算法对校验信息Verify Signature进行校验,如果校验成功,则认定为合法用户。
其中,HMACSHA256算法是一种基于SHA-256散列函数和密钥的消息认证码算法。它用于验证数据的完整性和真实性,以确保数据在传输过程中没有被篡改。已是成熟的现有技术,本发明不再赘述。
当Header信息、Payload信息和Verify Signature信息均校验成功时,确定客户端为合法用户,并将用户信息记录到认证缓存模块中;否则,确定客户端为非法用户。
其中,将用户信息记录到认证缓存模块中,并设置缓存过期时间,当下次有相同的jwt信息则不需要进行解密,数据库比对等步骤,直接可认定为合法用户,无需重复进行验证过程,提高了处理请求的效率。
S104:当客户端认证通过时,解析GraphQL请求以获取GraphQL请求的请求方法和请求名称。
具体而言,可以通过解析GraphQL请求的字符串形式,将其转换为GraphQL语法树(AST),然后从AST中提取出请求的操作名称和类型,从而获取请求方法和请求名称。这样可以帮助根据请求的不同类型进行相应的处理和逻辑判断。
在一种可能的实施方式中,S104具体包括:
检测当前请求的起始字符是否为GraphQL。
需要说明的是,检测当前请求的起始字符是否为GraphQL是为了确定所接收的请求是否是一个GraphQL请求,因为在一个应用程序的HTTP请求中,可能会有其他类型的请求(如RESTful API请求)。通过检测起始字符是否为GraphQL,可以快速判断请求的类型,以便正确处理。
当检测到当前请求的起始字符为GraphQL时,使用GraphQLVaildator验证器对GraphQL请求进行校验,获取GraphQL请求的请求方法和请求名称。
其中,GraphQL Validator是一个工具或库,用于验证GraphQL查询的语法和结构的正确性。
在一种可能的实施方式中,使用GraphQLVaildator验证器对GraphQL请求进行校验,具体包括:
对GraphQL请求进行词法分析,将GraphQL请求分解为多个Token词法单元。
其中,每个词法单元可以代表一个GraphQL的语法元素,如字段、变量、操作类型等。词法分析的目的是将输入的字符串转换为一系列有意义的Token。
将多个Token词法单元组合为语法树。
其中,语法树表示了GraphQL请求的结构和层次关系,将输入的GraphQL请求按照语法规则进行组织和嵌套。
将语法树转换为抽象语法树AST。
其中,抽象语法树AST是一种更加抽象和简化的表示形式,去除了语法细节和冗余信息,只保留了GraphQL请求的关键元素和结构。AST提供了一种更方便、可操作的形式来处理GraphQL请求。
从抽象语法树AST中提取出GraphQL请求的请求方法和请求名称。
具体而言,通过遍历AST,可以找到相应的节点或属性,从中获取请求方法(如查询、变更、订阅)和请求名称(具体的操作名称)。
在本发明中,通过词法分析、语法分析、AST转换和提取请求方法和请求名称,可以保证请求的语法正确性,提供结构化的请求表示形式,灵活地处理请求,并进行相应的操作和逻辑判断。这样做有助于提升提取出GraphQL请求的请求方法和请求名称的准确性。
S105:根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存GraphQL请求。
具体而言,可以根据GraphQL请求的当前缓存的过期时间来判断是否需要缓存GraphQL请求。GraphQL请求的当前缓存已过期则需要进行缓存,反之,则不需要进行缓存。
在一种可能的实施方式中,S105具体包括:
对请求方法和请求名称进行Hash处理,得到Hash处理的结果。
其中,哈希处理是一种将任意长度的输入数据转换为固定长度的输出的算法。通过对请求方法和请求名称进行哈希处理,可以生成一个唯一的哈希值作为标识。
根据Hash处理的结果,在缓存表中进行匹配,获取GraphQL请求的当前缓存的过期时间。
其中,缓存表是一个用于存储已缓存请求的数据结构,其中记录了每个请求的哈希处理结果和对应的缓存信息,如过期时间等。通过将哈希处理结果与缓存表中的记录进行匹配,可以确定是否已经存在缓存以及获取缓存的过期时间。
当当前缓存的过期时间超过预设时间时,确定需要缓存GraphQL请求,否则,确定不需要缓存GraphQL请求。
其中,当前缓存的过期时间超过预设时间时,表示缓存已过期,需要重新缓存该请求。否则,如果当前缓存的过期时间仍在预设时间范围内,说明缓存仍然有效,不需要进行重新缓存。
在本发明中,通过判断当前缓存的过期时间是否超过预设时间,可以及时检测到缓存的有效性。如果缓存的过期时间已经超过预设时间,意味着缓存已经过期失效,需要重新缓存最新的结果。这样可以避免使用过期的缓存数据,保证数据的准确性和实时性。进一步地,不需要缓存所有的GraphQL请求,只有当缓存的过期时间超过预设时间时才进行缓存。这样可以避免过度缓存,节省存储空间,减少不必要的资源消耗。只有经常被请求且具有较长有效期的GraphQL请求才会被缓存,提高缓存的有效性和利用率。
S106:当不需要缓存GraphQL请求时,通过请求函数进行处理。
其中,请求函数是指用于处理GraphQL请求的实际函数或方法。根据接收到的GraphQL请求,执行相应的业务逻辑并返回结果给客户端。
S107:当需要缓存GraphQL请求时,获取GraphQL请求的Key值。根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理。
其中,Key值是用于在缓存***中唯一标识和索引缓存数据的值。本步骤中可以将请求的字段、参数、操作类型等信息组合起来形成一个唯一的标识即Key值。这样确保不同的请求生成不同的Key值,以便能够区分和索引不同的缓存数据。
需要说明的是,如果在数据库中存在该Key值对应的缓存数据,那么可以直接从数据库中取出缓存数据的Value值,并将其返回给客户端。如果在数据库中不存在该Key值,说明该请求的数据还未被缓存,此时需要通过请求函数进行处理。请求函数会执行相应的业务逻辑,从数据库或其他数据源中获取数据,并对请求进行处理,最终得到处理结果。处理结果可以被返回给客户端,并在返回之前将其缓存起来,以便下次相同的请求可以直接从缓存中获取数据。
在本发明中,可以在需要缓存GraphQL请求时,根据key值来查询数据库或缓存***,从而实现对缓存数据的获取和利用。这样可以减少不必要的计算和数据库查询操作,提高***的响应速度和性能。同时,当缓存数据不存在时,通过请求函数进行处理可以保证返回客户端的数据是最新的,并在处理完毕后将其缓存起来,以便后续使用。
在一种可能的实施方式中,获取GraphQL请求的Key值,具体包括:
对HTTP请求进行Hash处理,得到第一次Hash结果。
其中,第一次Hash处理是对HTTP请求进行Hash处理,目的是将整个请求内容映射为一个固定长度的哈希值。这样可以保证不同的请求生成不同的哈希值,确保唯一性。通过将HTTP请求进行Hash处理,可以将请求的内容转化为一个短、固定长度的哈希值,便于后续的处理和索引。
将用户信息与第一次Hash结果进行拼接后进行第二次Hash处理,得到第二次Hash结果,其中,第二次Hash结果为GraphQL请求的Key值。
其中,第二次Hash处理是将用户信息与第一次Hash结果进行拼接,并再次进行Hash处理。这样的目的是将用户信息与请求内容结合起来生成最终的Key值。通过将用户信息与第一次Hash结果拼接后进行第二次Hash处理,可以生成一个唯一的Key值,用于在缓存***中标识和索引该GraphQL请求对应的缓存数据。
需要说明的是,第二次Hash处理结合了用户信息与第一次Hash结果,将用户信息与第一次Hash结果进行拼接,相当于将用户信息与原始请求内容进行关联。通过再次进行Hash处理,可以生成一个新的哈希值,该哈希值将用户信息与原始请求内容结合在一起。当下次使用该Key值进行查询时,可以使用相同的过程对用户信息进行校验。
S108:根据请求函数的处理结果判断GraphQL请求是否存在错误,若是,向客户端返回请求函数的处理结果,并对请求函数的处理结果进行缓存。否则,向客户端返回错误提示。
具体而言,请求函数是对GraphQL请求进行处理和执行的函数,它可能会返回处理结果,例如查询结果、错误信息等。通过检查请求函数的处理结果,可以确定GraphQL请求是否成功执行或存在错误。如果请求函数返回了一个错误结果,可以判断GraphQL请求存在错误;如果请求函数返回了一个有效的处理结果,可以判断GraphQL请求执行成功。
进一步地,当请求函数的处理结果确定为有效结果时,可以将该结果返回给客户端作为响应。同时,还可以选择将该结果进行缓存。缓存的目的是为了在下次相同的GraphQL请求到达时,可以直接使用缓存结果,避免重复执行请求函数,提高响应速度和***性能。
而如果请求函数的处理结果确定为错误结果,可以向客户端返回相应的错误提示。错误提示可以包括错误代码、错误消息、错误详细信息等,用于指示客户端发生了什么错误以及如何处理该错误。
在一种可能的实施方式中,根据请求函数的处理结果判断GraphQL请求是否存在错误,具体包括:
检索请求函数的处理结果,当请求函数的处理结果中存在error字段时,确定GraphQL请求存在错误。
需要说明的是,error字段通常用于标识请求执行过程中的错误情况,其中可以包含错误代码、错误消息、错误详细信息等。因此,当检索到的请求函数处理结果中存在error字段时,可以确定GraphQL请求存在错误。
在一种可能的实施方式中,根据请求函数的处理结果判断GraphQL请求是否存在错误,具体包括:
对请求函数添加注解或者函数包装,当请求函数执行超时或者执行失败时,确定GraphQL请求存在错误。
需要说明的是,通过监控请求函数的执行时间或执行结果,如果请求函数执行超过预设的时间限制或者执行结果表明请求失败,就可以确定GraphQL请求存在错误。超时和失败可能是由于各种原因,例如网络问题、依赖服务故障、异常抛出等。通过此种方式可以及时地发现和处理请求执行过程中的异常情况,提高***的稳定性和可靠性。并且,使用此种方法可以实现对于Restful请求的兼容,将此方法应用于Restful请求的缓存中。
与现有技术相比,本发明至少具有以下有益效果:
在本发明中,根据GraphQL请求的请求方法和请求名称,判断是否需要缓存GraphQL请求,当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理,并对请求函数的处理结果进行缓存。如果相同的请求被频繁发起,从缓存中获取结果可以显著减少处理时间,提高响应速度。进一步地,避免了在接口调用的函数上进行缓存,而是在接口中直接进行缓存,缓存接口的缓存速度高,从而提升开发效率。
第二方面,参照图2,示出了本发明实施例提供的一种缓存装置的结构示意图。
本发明提供了一种缓存装置20,包括:
接收模块201,用于接收客户端发起的HTTP请求,HTTP请求中包括GraphQL请求。
响应模块202,用于响应于HTTP请求,解析HTTP请求以获取客户端的用户信息。
认证模块203,用于根据用户信息对客户端进行认证。
解析模块204,用于当客户端认证通过时,解析GraphQL请求以获取GraphQL请求的请求方法和请求名称。
判断模块205,用于根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存GraphQL请求。
处理模块206,用于当不需要缓存GraphQL请求时,通过请求函数进行处理。
查询模块207,用于当需要缓存GraphQL请求时,获取GraphQL请求的Key值。根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理。
缓存模块208,用于根据请求函数的处理结果判断GraphQL请求是否存在错误,若是,向客户端返回请求函数的处理结果,并对请求函数的处理结果进行缓存。否则,向客户端返回错误提示。
在一种可能的实施方式中,认证模块203具体用于:
查询***内部的认证缓存模块是否记录有用户信息。
当认证缓存模块记录有用户信息时,确定客户端为合法用户,客户端认证通过。
当认证缓存模块未记录有用户信息时,对客户端进行JWT认证。
在一种可能的实施方式中,认证模块203具体用于:
将存储有用户信息的JWT字段按照预设符号进行分段。
将分段后的JWT字段分别进行解密。
对Header信息、Payload信息和Verify Signature信息依次进行校验;
当Header信息、Payload信息和Verify Signature信息均校验成功时,确定客户端为合法用户,并将用户信息记录到认证缓存模块中;否则,确定客户端为非法用户。
在一种可能的实施方式中,解析模块204具体用于:
检测当前请求的起始字符是否为GraphQL。
当检测到当前请求的起始字符为GraphQL时,使用GraphQLVaildator验证器对GraphQL请求进行校验,获取GraphQL请求的请求方法和请求名称。
在一种可能的实施方式中,解析模块204具体用于:
对GraphQL请求进行词法分析,将GraphQL请求分解为多个Token词法单元。
将多个Token词法单元组合为语法树。
将语法树转换为抽象语法树AST。
从抽象语法树AST中提取出GraphQL请求的请求方法和请求名称。
在一种可能的实施方式中,判断模块205具体用于:
对请求方法和请求名称进行Hash处理,得到Hash处理的结果。
根据Hash处理的结果,在缓存表中进行匹配,获取GraphQL请求的当前缓存的过期时间。
当当前缓存的过期时间超过预设时间时,确定需要缓存GraphQL请求,否则,确定不需要缓存GraphQL请求。
在一种可能的实施方式中,查询模块207具体用于:
对HTTP请求进行Hash处理,得到第一次Hash结果。
将用户信息与第一次Hash结果进行拼接后进行第二次Hash处理,得到第二次Hash结果,其中,第二次Hash结果为GraphQL请求的Key值。
在一种可能的实施方式中,缓存模块208具体用于:
检索请求函数的处理结果,当请求函数的处理结果中存在error字段时,确定GraphQL请求存在错误。
在一种可能的实施方式中,缓存模块208具体用于:
对请求函数添加注解或者函数包装,当请求函数执行超时或者执行失败时,确定GraphQL请求存在错误。
本发明提供的缓存装置20能够实现上述方法实施例中实现的各个过程,为避免重复,这里不再赘述。
本发明提供的虚拟装置可以是装置,也可以是终端中的部件、集成电路、或芯片。
与现有技术相比,本发明至少具有以下有益效果:
在本发明中,根据GraphQL请求的请求方法和请求名称,判断是否需要缓存GraphQL请求,当需要缓存GraphQL请求时,获取GraphQL请求的Key值,根据Key值查询数据库,当数据库中存在Key值时,返回Key值对应的Value值。当数据库中不存在Key值时,通过请求函数进行处理,并对请求函数的处理结果进行缓存。如果相同的请求被频繁发起,从缓存中获取结果可以显著减少处理时间,提高响应速度。进一步地,避免了在接口调用的函数上进行缓存,而是在接口中直接进行缓存,缓存接口的缓存速度高,从而提升开发效率。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换。而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (10)
1.一种缓存方法,其特征在于,包括:
接收客户端发起的HTTP请求,所述HTTP请求中包括GraphQL请求;
响应于所述HTTP请求,解析所述HTTP请求以获取所述客户端的用户信息;
根据所述用户信息对所述客户端进行认证;
当所述客户端认证通过时,解析所述GraphQL请求以获取所述GraphQL请求的请求方法和请求名称;
根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存所述GraphQL请求;
当不需要缓存所述GraphQL请求时,通过请求函数进行处理;
当需要缓存所述GraphQL请求时,获取所述GraphQL请求的Key值,根据所述Key值查询数据库;当所述数据库中存在所述Key值时,返回所述Key值对应的Value值;当所述数据库中不存在所述Key值时,通过请求函数进行处理;
根据所述请求函数的处理结果判断所述GraphQL请求是否存在错误,若是,向所述客户端返回所述请求函数的处理结果,并对所述请求函数的处理结果进行缓存;否则,向所述客户端返回错误提示。
2.根据权利要求1所述的缓存方法,其特征在于,所述根据所述用户信息对所述客户端进行认证,具体包括:
查询***内部的认证缓存模块是否记录有所述用户信息;
当所述认证缓存模块记录有所述用户信息时,确定所述客户端为合法用户,所述客户端认证通过;
当所述认证缓存模块未记录有所述用户信息时,对所述客户端进行JWT认证。
3.根据权利要求2所述的缓存方法,其特征在于,所述对所述客户端进行JWT认证,具体包括:
将存储有所述用户信息的JWT字段按照预设符号进行分段为Header信息、Payload信息和Verify Signature信息;
将所述Header信息、Payload信息和Verify Signature信息进行解密;
对解密后的所述Header信息、Payload信息和Verify Signature信息依次进行校验;
当解密后的所述Header信息、Payload信息和Verify Signature信息均校验成功时,确定所述客户端为合法用户,并将所述用户信息记录到所述认证缓存模块中;否则,确定所述客户端为非法用户。
4.根据权利要求1所述的缓存方法,其特征在于,所述解析所述GraphQL请求以获取所述GraphQL请求的请求方法和请求名称,具体包括:
检测当前请求的起始字符是否为GraphQL;
当检测到当前请求的起始字符为GraphQL时,使用GraphQLVaildator验证器对GraphQL请求进行校验,获取所述GraphQL请求的请求方法和请求名称。
5.根据权利要求4所述的缓存方法,其特征在于,所述使用GraphQLVaildator验证器对GraphQL请求进行校验,具体包括:
对所述GraphQL请求进行词法分析,将所述GraphQL请求分解为多个Token词法单元;
将多个所述Token词法单元组合为语法树;
将所述语法树转换为抽象语法树AST;
从所述抽象语法树AST中提取出所述GraphQL请求的请求方法和请求名称。
6.根据权利要求1所述的缓存方法,其特征在于,所述根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存所述GraphQL请求,具体包括:
对请求方法和请求名称进行Hash处理,得到Hash处理结果;
根据所述Hash处理结果,在所述缓存表中进行匹配,获取所述GraphQL请求当前缓存的过期时间;
当所述当前缓存的过期时间超过预设时间时,确定需要缓存所述GraphQL请求,否则,确定不需要缓存所述GraphQL请求。
7.根据权利要求1所述的缓存方法,其特征在于,所述获取所述GraphQL请求的Key值具体包括:
对所述HTTP请求进行Hash处理,得到第一次Hash处理结果;
将所述用户信息与所述第一次Hash处理结果进行拼接后进行第二次Hash处理,得到第二次Hash处理结果,其中,所述第二次Hash处理结果为所述GraphQL请求的Key值。
8.根据权利要求1所述的缓存方法,其特征在于,所述根据所述请求函数的处理结果判断所述GraphQL请求是否存在错误,具体包括:
检索所述请求函数的处理结果,当所述请求函数的处理结果中存在error字段时,确定所述GraphQL请求存在错误。
9.根据权利要求1所述的缓存方法,其特征在于,所述根据所述请求函数的处理结果判断所述GraphQL请求是否存在错误,具体包括:
对所述请求函数添加注解或者函数包装,当所述请求函数执行超时或者执行失败时,确定所述GraphQL请求存在错误。
10.一种缓存装置,其特征在于,包括:
接收模块,用于接收客户端发起的HTTP请求,所述HTTP请求中包括GraphQL请求;
响应模块,用于响应于所述HTTP请求,解析所述HTTP请求以获取所述客户端的用户信息;
认证模块,用于根据所述用户信息对所述客户端进行认证;
解析模块,用于当所述客户端认证通过时,解析所述GraphQL请求以获取所述GraphQL请求的请求方法和请求名称;
判断模块,用于根据请求方法和请求名称查询***内部的缓存表,判断是否需要缓存所述GraphQL请求;
处理模块,用于当不需要缓存所述GraphQL请求时,通过请求函数进行处理;
查询模块,用于当需要缓存所述GraphQL请求时,获取所述GraphQL请求的Key值,根据所述Key值查询数据库;当所述数据库中存在所述Key值时,返回所述Key值对应的Value值;当所述数据库中不存在所述Key值时,通过请求函数进行处理;
缓存模块,用于根据所述请求函数的处理结果判断所述GraphQL请求是否存在错误,若是,向所述客户端返回所述请求函数的处理结果,并对所述请求函数的处理结果进行缓存;否则,向所述客户端返回错误提示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310807434.1A CN116521745A (zh) | 2023-07-04 | 2023-07-04 | 一种缓存方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310807434.1A CN116521745A (zh) | 2023-07-04 | 2023-07-04 | 一种缓存方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116521745A true CN116521745A (zh) | 2023-08-01 |
Family
ID=87399799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310807434.1A Pending CN116521745A (zh) | 2023-07-04 | 2023-07-04 | 一种缓存方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116521745A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111447220A (zh) * | 2020-03-26 | 2020-07-24 | 金蝶软件(中国)有限公司 | 认证信息管理方法、应用***的服务端及计算机存储介质 |
CN114285835A (zh) * | 2021-12-30 | 2022-04-05 | 北京天融信网络安全技术有限公司 | 一种http请求数据的处理方法及*** |
CN115396180A (zh) * | 2022-08-23 | 2022-11-25 | 中国民航信息网络股份有限公司 | 微服务网关统一认证方法、装置、微服务网关及存储介质 |
CN115757495A (zh) * | 2022-11-21 | 2023-03-07 | 中国平安财产保险股份有限公司 | 缓存数据处理方法、装置、计算机设备及存储介质 |
CN116226200A (zh) * | 2023-03-07 | 2023-06-06 | 智慧星光(安徽)科技有限公司 | 一种基于bff架构的服务接口数据缓存方法、装置及设备 |
CN116527341A (zh) * | 2023-04-19 | 2023-08-01 | 上海众种生态科技有限公司 | 一种客户端调用后端接口鉴权授权安全方法 |
-
2023
- 2023-07-04 CN CN202310807434.1A patent/CN116521745A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111447220A (zh) * | 2020-03-26 | 2020-07-24 | 金蝶软件(中国)有限公司 | 认证信息管理方法、应用***的服务端及计算机存储介质 |
CN114285835A (zh) * | 2021-12-30 | 2022-04-05 | 北京天融信网络安全技术有限公司 | 一种http请求数据的处理方法及*** |
CN115396180A (zh) * | 2022-08-23 | 2022-11-25 | 中国民航信息网络股份有限公司 | 微服务网关统一认证方法、装置、微服务网关及存储介质 |
CN115757495A (zh) * | 2022-11-21 | 2023-03-07 | 中国平安财产保险股份有限公司 | 缓存数据处理方法、装置、计算机设备及存储介质 |
CN116226200A (zh) * | 2023-03-07 | 2023-06-06 | 智慧星光(安徽)科技有限公司 | 一种基于bff架构的服务接口数据缓存方法、装置及设备 |
CN116527341A (zh) * | 2023-04-19 | 2023-08-01 | 上海众种生态科技有限公司 | 一种客户端调用后端接口鉴权授权安全方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11296865B1 (en) | Cryptographic algorithm status transition | |
US8751815B2 (en) | Creating and verifying globally unique device-specific identifiers | |
JP5658745B2 (ja) | Httpベースの認証 | |
US8693690B2 (en) | Organizing an extensible table for storing cryptographic objects | |
US20180020008A1 (en) | Secure asynchronous communications | |
US8869258B2 (en) | Facilitating token request troubleshooting | |
CN112468520B (zh) | 一种数据检测方法、装置、设备及可读存储介质 | |
CN110888838B (zh) | 基于对象存储的请求处理方法、装置、设备及存储介质 | |
US20110029555A1 (en) | Method, system and apparatus for content identification | |
US20070136794A1 (en) | Request authentication token | |
CN110263579B (zh) | 一种数据处理方法、***及相关设备 | |
US20070204156A1 (en) | Systems and methods for providing access to network resources based upon temporary keys | |
CN1340940A (zh) | 用于处理分组业务的接入-请求消息的方法 | |
CN110445615B (zh) | 网络请求安全性验证方法、装置、介质及电子设备 | |
CN107306246A (zh) | 基于访问密钥的数据获取方法 | |
CN113225351B (zh) | 一种请求处理方法、装置、存储介质及电子设备 | |
WO2022057002A1 (zh) | 一种异常请求处理方法和装置 | |
CN111367923A (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN114157434A (zh) | 登录验证方法、装置、电子设备及存储介质 | |
WO2021078062A1 (zh) | Ssl证书校验方法、装置、设备及计算机存储介质 | |
CN111371811B (zh) | 一种资源调用方法、资源调用装置、客户端及业务服务器 | |
CN116521745A (zh) | 一种缓存方法以及装置 | |
EP4203438A1 (en) | Message pushing method, and electronic device and storage medium | |
CN112416875B (zh) | 日志管理方法、装置、计算机设备及存储介质 | |
CN110750290B (zh) | 基于dns查询的软件版本升级方法及装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20230801 |