CN113282626A - 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 - Google Patents
基于Redis的缓存数据的方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN113282626A CN113282626A CN202110599985.4A CN202110599985A CN113282626A CN 113282626 A CN113282626 A CN 113282626A CN 202110599985 A CN202110599985 A CN 202110599985A CN 113282626 A CN113282626 A CN 113282626A
- Authority
- CN
- China
- Prior art keywords
- key
- redis database
- caching
- redis
- data
- 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 67
- 238000004590 computer program Methods 0.000 claims description 14
- 238000004422 calculation algorithm Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 abstract description 18
- 230000005540 biological transmission Effects 0.000 abstract description 11
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000013209 evaluation strategy Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
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/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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Redis的缓存数据的方法、装置、计算机设备及存储介质,该方法包括接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对Redis数据库进行键值查询以得到Redis数据库中是否存在与缓存请求相匹配的第一Key的查询结果;若查询结果为Redis数据库中存在第一Key,将查询结果发送给用户;若查询结果为Redis数据库中不存在第一Key,基于预设的Lua脚本请求设置第一Key以及第一Key的过期时间;若第一Key设置成功,将预置的数据缓存至Redis数据库中并将缓存结果发送给用户。本发明基于数据缓存技术,在移动医疗的应用场景中可通过采用预设的lua脚本执行数据在Redis数据库中缓存过程,保证了执行在Redis数据库中执行缓存的过程中的原子性,提高了网络传输的效率。
Description
技术领域
本发明属于数据缓存技术领域,尤其涉及一种基于Redis的缓存数据的方法、装置、计算机设备及存储介质。
背景技术
Redis数据库是一个开源的底层使用C语言编写的Key-Value存储数据库,可广泛用于缓存、排行榜、计数器、分布式会话、分布式锁、社交网络、最新列表、消息系统、限流等复杂多变的业务场景。通过Redis数据库进行数据缓存的过程中,发明人发现当使用到分布式锁时,通常需先使用Jedis设置Key-Value,然后再设置过期时间,无法保证其原子性,从而影响数据传输效率。例如,当Redis应用于移动医疗终端场景时,虽然可以解决在使用移动医疗终端时出现的卡顿现象,但是在对相关的医疗数据进行缓存的过程中仍然无法保证缓存操作的原子性。
发明内容
本发明实施例提供了一种基于Redis的缓存数据的方法、装置、计算机设备及存储介质,旨在解决现有技术中在Redis数据库执行缓存时无法保证缓存过程的原子性的问题。
第一方面,本发明实施例提供了一种基于Redis的缓存数据的方法,其包括:
一种基于Redis的缓存数据的方法,其特征在于,包括以下步骤:
接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;
对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;
若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;
若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;
若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
第二方面,本发明实施例提供了一种基于Redis的缓存数据的装置,其包括:
接收单元,用于接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;
查询单元,用于对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;
第一发送单元,用于若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;
第一设置单元,用于若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的lua脚本请求设置所述第一Key以及所述第一Key的过期时间;
第二发送单元,用于若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
第三方面,本发明实施例又提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上述第一方面所述的基于Redis的缓存数据的方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其中所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行上述第一方面所述的基于Redis的缓存数据的方法。
本发明实施例提供了一种基于Redis的缓存数据的方法、装置、计算机设备及存储介质,通过接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。上述方法通过采用预设的lua脚本执行数据在Redis数据库中缓存过程,保证了在Redis数据库中执行缓存的过程中的原子性,提高了网络传输的效率。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于Redis的缓存数据的方法的流程示意图;
图2为本发明实施例提供的基于Redis的缓存数据的方法的应用场景示意图;
图3为本发明实施例提供的基于Redis的缓存数据的方法的子流程示意图;
图4为本发明实施例提供的基于Redis的缓存数据的方法的另一子流程示意图;
图5为本发明实施例提供的基于Redis的缓存数据的方法的另一子流程示意图;
图6为本发明实施例提供的基于Redis的缓存数据的装置的示意性框图;
图7为本发明实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1和图2,图1为本发明实施例提供的基于Redis的缓存数据的方法的流程示意图;图2为本发明实施例提供的基于Redis的缓存数据的方法的应用场景示意图。所述的基于Redis的缓存数据的方法在执行服务器中运行,执行服务器在接收到用户通过客户端,尤其在移动医疗的应用场景中,通过移动医疗终端发送向所述Redis数据库进行缓存数据的缓存请求后,执行服务器根据所述缓存请求在所述Redis数据库中查询是存在与所述数据相对应的Key,进而获取出所述Redis数据库中是否已经缓存所述数据,若所述Redis数据库未缓存过所述数据,则基于lua脚本同时提交缓存所述数据、设置于所述数据相对应的Key以及该Key的过期时间,进而保证了在Redis数据库中执行数据缓存过程中的原子性,提高了网络传输的速率。本发明实施例中所述客户端可为智能手机、平板电脑、笔记本以及台式电脑等终端设备。需要说明的是,图2中所述Redis数据库在实际操作过程中是为集群模式。
如图1所示,该方法包括步骤S110~S150。
S110、接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求。
接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求。具体的,所述Redis数据库是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。随着企业的业务的扩展海量增加,需要对数据库进行频繁的操作,由于频繁的操作数据库非常消耗数据库的性能,最终导致数据的读写速度变慢。通过引入所述Redis数据库将一些常用的数据缓存到所述Redis数据库中,从而很好的提高了网站的加载效率,降低对数据库的读写次数。所述查询请求包括所述数据以及在所述Redis数据库中已经设置并用来标识所述数据的Key,通过该Key可从所述Redis数据库中获取所述Redis数据库中是否缓存有所述数据。
在另一实施例中,所述接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求之前,还包括:基于令牌桶算法编写所述lua脚本或设置预设的调用时间以对所述Redis数据库进行限流。
基于令牌桶算法编写所述lua脚本或设置预设的调用时间以对所述Redis数据库进行限流。具体的,在所述Redis数据库中进行限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,以防止访问所述Redis数据库时在同一时间出现大量访问请求造成所述Redis数据库崩溃。当达到限制速率则可以拒绝服务、排队或等待、降级等处理。Redis数据库本质上属于一个API,并且为单线程操作的特点,因此,Redis数据库是无法在同一时间内同时处理多个请求的,从而使得在接收用户发送对所述Redis数据库中缓存数据进行查询之前,至少包括一个对所述Redis数据库进行访问请求。故接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求之前,根据调用所述Redis数据库的缓存场景进行对所述Redis数据库缓存进行限流能保证所述Redis数据库缓存顺利并快速的处理所述缓存请求。通常所述Redis数据库的具体应用场景包括短时间内的大流量、热点时间大流量以及恶意刷单的高并发应用场景,即同一时刻有大量的用户请求到达服务器使得服务器需要对请求进行处理并及时返回响应信息的应用场景。
在本发明实施例中,既可以采用基于令牌桶算法编写所述lua脚本以对所述Redis数据库进行限流,也可以设置预设的调用时间以对所述Redis数据库进行限流。其中令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。而设置预设的调用时间以对所述Redis数据库进行限流处理主要是规定在预设时间内只允许一次所述Redis数据库接收的请求进行处理。例如,所述预设时间为120秒,即只能在120秒内发送一次验证码访问所述Redis数据库。当采用设置预设的调用时间以对所述Redis数据库进行限流时,即在规定时间内限定某个IP调用所述Redis数据库的次数来进行限流。例如,可规定在120s内只能调用所述Redis数据库一次来进行限定。
S120、对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果。
对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果。具体的,所述查询结果为执行服务器在所述Redis数据库中进行键值查询以得到所述Redis数据库中是否存在与所述数据相对应的第一Key的结果信息,所述键值查询为对所述Redis数据库中与所述数据相对应的Key-Value的查询,所述数据缓存在所述Redis数据库中时,是以Key-Value(键值对)的形式缓存在所述Redis数据库中,其中,key value根据关键字取值,Key为关键字,Value为值,所述缓存请求中包含有所述第一Key,所述Redis数据库中缓存的数据指的就是Redis数据库的值Value的类型,通常所述Redis数据库中缓存的数据的结构类型包括string、list、set、sortedSet、hash等类型,所述第一Key在所述Redis数据库中有相对应的值Value,即所述第一Key为在所述Redis数据库中有相对应的值Value的身份标识信息。在本发明实施例中,所述Redis数据库中缓存的数据的结构类型为hash类型。当所述Redis数据库中不存在所述第一Key,则所述Redis数据库中即不存在与所述第一Key相对应的值Value数据,即所述Redis数据库中不存在与所述数据相对应的第一Key,用户也无法从所述Redis数据库中查询到与所述数据。
S130、若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户。
当所述查询结果为所述Redis数据库中存在所述第一Key时,将所述查询结果发送给所述用户,即根据所述查询结果可得出所述Redis数据库中缓存有所述数据的相关信息,此时无需将所述数据缓存在所述Redis数据库中。
S140、若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的lua脚本请求设置所述第一Key以及所述第一Key的过期时间。
若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的lua脚本请求设置所述第一Key以及所述第一Key的过期时间。具体的,当所述查询结果为所述Redis数据库中不存在所述第一Key时,客户端调用采用lua脚本语言编写的API接口请求设置所述第一Key以及所述第一Key的过期时间。所述lua脚本是一个小巧的脚本语言lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,使得lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护,而且lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。通常一个完整的lua解释器不过200k,并且在所有脚本引擎中,lua的速度是最快的。在现有技术中在执行服务器中设置所述第一Key时,通常采用Jedis先设置所述第一Key对应的键值,然后再在所述Redis数据库中设置所述第一Key的过期时间,该过程相当于两个步骤,是无法保证命令的原子性,进而无法达到预期的效果。而采用所述lua脚本的方式可直接提交在所述Redis数据库中设置所述第一Key以及所述第一Key的过期时间,两个步骤同时进行,进而保证了命令的原子性,减少了网络传输,进而提高了处理效率。
在另一实施例中,如图3所示,步骤S140之后还包括步骤:S1401和S1402。
S1401、若所述第一Key设置失败,根据预设的请求规则请求设置所述第一Key以及所述第一Key的过期时间。
若所述第一Key设置失败,根据预设的请求规则请求设置所述第一Key以及所述第一Key的过期时间。具体的,所述第一Key设置失败表示对所述Redis数据库加锁失败,即所述Redis数据库当前时刻正在执行其他请求的处理,其主要目的是为了避免和当前时刻多个对所述Redis数据库进行操作的请求发生冲突。所述请求规则为所述第一Key在所述Redis数据库中设置失败后再次请求设置所述第一Key的规则信息。通常所述Redis数据库在接收到多个请求时,所述Redis数据库按照接收到请求的先手顺序执行最先发送的请求,并对所述Redis数据库进行加锁,若所述Redis数据库在执行所述请求前有多个请求时,则所述请求需按照发送时间顺序排队等到所述Redis数据库执行完排在所述请求前面的请求后才可使得所述Redis数据库执行对所述请求。所述请求在进行排队的过程中,设定所述请求排队的时间,若排队时间超过设定的排队时间,则结束此次请求。在通常情况下,可设置循环每隔一段时间请求在所述Redis数据库中设置所述第一Key,直至所述第一Key设置成功。在本发明实施例中,采用每隔50s请求在所述Redis数据库中设置所述第一Key,连续循环3次,在循环3次后仍然无法成功在所述Redis数据库中设置所述第一Key,便可放弃在所述Redis数据库中设置所述第一Key的请求并通知所述用户在所述Redis数据库中设置所述第一Key失败,即无法对所述数据进行缓存。
S1402、若根据所述请求规则请求设置所述第一Key失败,将所述根据所述请求规则请求设置所述第一Key失败的结果发送给所述用户。
若根据所述请求规则请求在所述Redis数据库中设置所述第一Key失败,将所述根据所述请求规则请求在所述Redis数据库中设置所述第一Key失败的结果发送给所述用户。在本发明实施例中,采用每隔50s请求在所述Redis数据库中设置所述第一Key,连续循环3次,在循环3次后仍然无法在所述Redis数据库中成功设置所述第一Key,便可放弃在所述Redis数据库中设置所述第一Key的请求并通知所述用户在所述Redis数据库中设置所述第一Key失败,即无法对所述数据进行缓存。
S150、若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。具体的,所述第一Key在所述Redis数据库中设置成功表示为对所述Redis数据库加锁成功。所述对所述Redis数据库加锁成功后,便可执行将所述数据缓存到所述Redis数据库中并将缓存成功的结果发送给所述用户。在本发明实施例中,采用面向切面编程技术来整合所述数据以获取类路径、方法名,参数并作为所述第一Key的Value并缓存到所述Redis数据库中,从而保证所述数据的唯一性,同时,获取所述第一Key的过期时间并随所述数据缓存的结果一起发送给所述用户,另外,获取所述第一Key的过期时间为获取注解后所述第一Key的过期时间的参数值。
在另一实施例中,如图4所示,步骤S150中所述将所述预置的数据缓存至所述Redis数据库中之前,还包括步骤S1501和S1502。
S1501、判断所述Redis数据库是否满足缓存所述预置的数据的条件。
判断所述Redis数据库是否满足缓存所述预置的数据的条件。具体的,在将所述数据缓存到所述Redis数据库之前,需判断所述Redis数据库的内存是否满足缓存所述数据。当所述Redis数据库的容量满足要求时,则可将所述数据进行缓存,当所述Redis数据库不满足要求时,需删除所述Redis数据库中无效的缓存数据以便于所述数据能缓存在所述Redis数据库中,其中,无效缓存数据为无效的Key-Value,即无效的键值。在本发明实施例中,通过No-eviction策略将所述Redis数据库中添加所述数据,当所述Redis数据库直接返回错误时,便可判定所述Redis数据库不满足缓存所述数据的条件,此时便可需要对所述Redis数据库中无效的数据进行删除。
S1502、若所述Redis数据库不满足所述条件,删除所述Redis数据库中无效的数据。
若所述Redis数据库不满足所述条件,删除所述Redis数据库中无效的数据。具体的,所述删除所述Redis数据库中无效的数据为删除所述Redis数据库中无效的缓存数据。由于Redis数据库是基于内存的Key-Value数据库,内存是有限的宝贵资源。在本发明实施例中,当所述Redis数据库不满足缓存所述数据时,采用LRU算法从设置了过期时间的Key中删除所述Redis数据库中无效的数据。
在另一实施例中,如图5所示,步骤S150中所述将缓存结果发送给所述用户之后,还包括步骤S1503、S1504和S1505。
S1503、若接收到所述用户发送更新所述Redis数据库中的所述预置的数据的更新请求,基于所述lua脚本请求设置预设的第二Key、所述第二Key的过期时间。
若接收到所述用户发送更新所述Redis数据库中的所述预置的数据的更新请求,基于所述lua脚本请求设置预设的第二Key、所述第二Key的过期时间。其中,所述更新请求中包括与所述数据相对应的更新后的数据和所述数据的方法名。所述第一Key、所述第二Key均为需缓存在所述Redis数据库中的数据所对应的标识字符,通过标识字符可获得相应的缓存数据。在本发明实施例中,采用所述lua脚本的方式可直接提交在所述Redis数据库中设置所述第二Key以及所述第二Key的过期时间,两个步骤同时进行,进而保证了命令的原子性,减少了网络传输,进而提高了更新所述数据的效率。
S1504、若所述第二Key设置成功,判断所述Redis数据库中是否存在所述第二Key。
若所述第二Key设置成功,判断所述Redis数据库中是否存在所述第二Key。同样的,通常所述Redis数据库在接收到多个请求时,所述Redis数据库按照接收到请求的先手顺序执行最先发送的请求,并对所述Redis数据库进行加锁,若所述Redis数据库在执行设置预设的第二Key、所述第二Key的过期时间的请求时,若前面有多个请求,则设置预设的第二Key、所述第二Key的过期时间的请求需按照发送时间顺序排队等到所述Redis数据库执行完排在设置预设的第二Key、所述第二Key的过期时间的请求后才可使得所述Redis数据库执行设置预设的第二Key、所述第二Key的过期时间的请求。所述第二Key在所述Redis数据库中设置成功即表示为对所述Redis数据库加锁成功。对所述Redis数据库加锁成功后,由于所述Redis数据库中的所述数据是以Key-Value的形式缓存在所述Redis数据库中,且该Value采用面向切面编程技术来将所述数据获取类路径、方法名,参数整合而成,而所述更新请求中包括与所述数据相对应的更新后的数据和所述数据的方法名,通过将所述更新请求中的所述数据的方法名查询所述数据并判断缓存在所述Redis数据库中的数据是否存在所述第二Key。当所述Redis数据库中的数据不存在所述第二Key时,则保留所述Redis数据库中的所述数据以防止误删;当所述Redis数据库中的数据存在所述第二Key时,则可删除所述Redis数据库中的所述数据并将与所述数据相对应的更新后的数据缓存到所述Redis数据库中以更新所述数据。
另外,在所述Redis数据库中请求设置预设的第二Key、所述第二Key的过期时间的过程中,也会出现设置所述第二Key失败的结果,因此,当设置所述第二Key失败时,即对所述Redis数据库加锁失败,需要多次在所述Redis数据库中请求设置所述第二Key。在本发明实施例中,采用每隔50s请求在所述Redis数据库中设置所述第二Key,连续循环3次,在循环3次后仍然无法成功在所述Redis数据库中设置所述第二Key,便可放弃在所述Redis数据库中设置所述第二Key的请求并通知所述用户在所述Redis数据库中设置所述第二Key失败,即无法对所述数据进行缓存。
S1505、若所述Redis数据库中存在所述第二Key,更新所述Redis数据库中的所述预置的数据并将更新的结果发送至所述用户。
若所述Redis数据库中存在所述第二Key,更新所述Redis数据库中的所述预置的数据并将更新的结果发送至所述用户。在本发明实施例中,先采用LRU算法从设置了过期时间的所述第二Key中删除所述数据,然后采用面向切面编程技术来整合所述更新请求中的与所述数据相对应的更新后的数据以获取类路径、方法名,参数并作为所述第二Key的Value并缓存到所述Redis数据库中以完成更新所述Redis数据库中的所述数据,并保证了所述数据的唯一性,同时,获取所述第二Key的过期时间并随所述数据缓存的结果一起发送给所述用户,另外,获取所述第二Key的过期时间为获取注解后所述第二Key的过期时间的参数值。
本申请中的技术方法可应用于智慧政务/智慧城管/智慧社区/智慧安防/智慧物流/智慧医疗/智慧教育/智慧环保/智慧交通等包含数据采集的应用场景中,从而推动智慧城市的建设。
在本发明实施例所提供的基于Redis的缓存数据的方法中,通过接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。上述方法通过采用预设的lua脚本执行数据在Redis数据库中缓存过程,保证了执行在Redis数据库中执行缓存的过程中的原子性,提高了网络传输的效率。
本发明实施例还提供了一种基于Redis的缓存数据的装置100,该装置用于执行前述基于Redis的缓存数据的方法的任一实施例。具体地,请参阅图6,图6是本发明实施例提供的基于Redis的缓存数据的装置100的示意性框图。
如图6所示,所述的基于Redis的缓存数据的装置100,该装置包括接收单元110、查询单元120、第一发送单元130、第一设置单元140和第二发送单元150。
接收单元110,用于接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求。
在其他发明实施例中,所述的基于Redis的缓存数据的装置100还包括:限流单元1101。
限流单元1101,用于基于令牌桶算法编写所述lua脚本或设置预设的调用时间以对所述Redis数据库进行限流。
查询单元120,用于对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果。
第一发送单元130,用于若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户。
第一设置单元140,用于若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的lua脚本请求设置所述第一Key以及所述第一Key的过期时间。
在其他发明实施例中,所述的基于Redis的缓存数据的装置100还包括:第二设置单元1401和第三发送单元1402。
第二设置单元1401,用于若所述第一Key设置失败,根据预设的请求规则请求设置所述第一Key以及所述第一Key的过期时间。
第三发送单元1402,用于若根据所述请求规则请求设置所述第一Key失败,将所述根据所述请求规则请求设置所述第一Key失败的结果发送给所述用户。
第二发送单元150,用于若所述第一Key设置成功,将所述数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
在其他发明实施例中,所述的基于Redis的缓存数据的装置100还包括:第一判断单元1501和删除单元1502。
第一判断单元1501,用于判断所述Redis数据库是否满足缓存所述预置的数据的条件。
删除单元1502,用于若所述Redis数据库不满足所述条件,删除所述Redis数据库中无效的数据。
在其他发明实施例中,所述的基于Redis的缓存数据的装置100还包括:
第三设置单元1503,用于若接收到所述用户发送更新所述Redis数据库中的所述预置的数据的更新请求,基于所述lua脚本请求设置预设的第二Key、所述第二Key的过期时间。
第二判断单元1504,用于若所述第二Key设置成功,判断所述Redis数据库中是否存在所述第二Key。
更新单元1505,用于若所述Redis数据库中存在所述第二Key,更新所述Redis数据库中的所述预置的数据并将更新的结果发送至所述用户。
本发明实施例所提供的基于Redis的缓存数据的装置100用于执行上述用于接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
请参阅图7,图7是本发明实施例提供的计算机设备的示意性框图。
参阅图7,该设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。
该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032被执行时,可使得处理器502执行基于Redis的缓存数据的方法。
该处理器502用于提供计算和控制能力,支撑整个设备500的运行。
该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行基于Redis的缓存数据的方法。
该网络接口505用于进行网络通信,如提供数据信息的传输等。本领域技术人员可以理解,图7中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的设备500的限定,具体的设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下功能:接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
本领域技术人员可以理解,图7中示出的设备500的实施例并不构成对设备500具体构成的限定,在其他实施例中,设备500可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,设备500可以仅包括存储器及处理器502,在这样的实施例中,存储器及处理器502的结构及功能与图7所示实施例一致,在此不再赘述。
应当理解,在本发明实施例中,处理器502可以是中央处理单元(CentralProcessing Unit,CPU),该处理器502还可以是其他通用处理器502、数字信号处理器502(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器502可以是微处理器502或者该处理器502也可以是任何常规的处理器502等。
在本发明的另一实施例中提供计算机存储介质。该存储介质可以为非易失性的计算机可读存储介质。该存储介质存储有计算机程序5032,其中计算机程序5032被处理器502执行时实现以下步骤:接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台设备500(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种基于Redis的缓存数据的方法,其特征在于,包括以下步骤:
接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;
对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;
若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;
若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间;
若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
2.根据权利要求1所述的基于Redis的缓存数据的方法,其特征在于,所述接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求之前,还包括:
基于令牌桶算法编写所述lua脚本或设置预设的调用时间以对所述Redis数据库进行限流。
3.根据权利要求1所述的基于Redis的缓存数据的方法,其特征在于,所述将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户之前,还包括:
判断所述Redis数据库是否满足缓存所述预置的数据的条件;
若所述Redis数据库不满足所述条件,删除所述Redis数据库中无效的数据。
4.根据权利要求1所述的基于Redis的缓存数据的方法,其特征在于,所述基于预设的Lua脚本请求设置所述第一Key以及所述第一Key的过期时间之后,还包括:
若所述第一Key设置失败,根据预设的请求规则请求设置所述第一Key以及所述第一Key的过期时间;
若根据所述请求规则请求设置所述第一Key失败,将所述根据所述请求规则请求设置所述第一Key失败的结果发送给所述用户。
5.根据权利要求1所述的基于Redis的缓存数据的方法,其特征在于,所述将缓存结果发送给所述用户之后,还包括:
若接收到所述用户发送更新所述Redis数据库中的所述预置的数据的更新请求,基于所述lua脚本请求设置预设的第二Key、所述第二Key的过期时间;
若所述第二Key设置成功,判断所述Redis数据库中是否存在所述第二Key;
若所述Redis数据库中存在所述第二Key,更新所述Redis数据库中的所述预置的数据并将更新的结果发送至所述用户。
6.一种基于Redis的缓存数据的装置,其特征在于,包括:
接收单元,用于接收用户发送将预置的数据缓存至预设的Redis数据库中的缓存请求;
查询单元,用于对所述Redis数据库进行键值查询以得到所述Redis数据库中是否存在与所述缓存请求相匹配的第一Key的查询结果;
第一发送单元,用于若所述查询结果为所述Redis数据库中存在所述第一Key,将所述查询结果发送给所述用户;
第一设置单元,用于若所述查询结果为所述Redis数据库中不存在所述第一Key,基于预设的lua脚本请求设置所述第一Key以及所述第一Key的过期时间;
第二发送单元,用于若所述第一Key设置成功,将所述预置的数据缓存至所述Redis数据库中并将缓存结果发送给所述用户。
7.根据权利要求6所述的基于Redis的缓存数据的装置,其特征在于,还包括:
限流单元,用于基于令牌桶算法编写所述lua脚本或设置预设的调用时间以对所述Redis数据库进行限流。
8.根据权利要求6所述的基于Redis的缓存数据的装置,其特征在于,还包括:
第一判断单元,用于判断所述Redis数据库是否满足缓存所述预置的数据的条件;
第一删除单元,用于若所述Redis数据库不满足所述条件,删除所述Redis数据库中无效的数据。
9.一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的基于Redis的缓存数据的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行如权利要求1至5任一项所述的基于Redis的缓存数据的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110599985.4A CN113282626A (zh) | 2021-05-31 | 2021-05-31 | 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110599985.4A CN113282626A (zh) | 2021-05-31 | 2021-05-31 | 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113282626A true CN113282626A (zh) | 2021-08-20 |
Family
ID=77282609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110599985.4A Pending CN113282626A (zh) | 2021-05-31 | 2021-05-31 | 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113282626A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114331576A (zh) * | 2021-12-30 | 2022-04-12 | 福建博思软件股份有限公司 | 基于高并发场景下的电子票号快速取票方法及存储介质 |
CN115314423A (zh) * | 2022-07-19 | 2022-11-08 | 杭州安恒信息技术股份有限公司 | 流量数据统计方法、装置及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108829413A (zh) * | 2018-05-07 | 2018-11-16 | 北京达佳互联信息技术有限公司 | 数据更新方法、装置及计算机可读存储介质、服务器 |
CN111190928A (zh) * | 2019-12-24 | 2020-05-22 | 平安普惠企业管理有限公司 | 缓存处理方法、装置、计算机设备以及存储介质 |
CN111459658A (zh) * | 2020-03-10 | 2020-07-28 | 中国平安人寿保险股份有限公司 | 一种资源数据获取方法及相关设备 |
CN112052263A (zh) * | 2020-07-13 | 2020-12-08 | 浙江大搜车软件技术有限公司 | 请求指令处理的方法、系统、计算机设备和可读存储介质 |
CN112328632A (zh) * | 2020-10-09 | 2021-02-05 | 福建亿榕信息技术有限公司 | 一种分布式两级缓存的方法和系统 |
CN112711730A (zh) * | 2021-01-21 | 2021-04-27 | 上海观察者信息技术有限公司 | 一种数据的缓存方法、装置、存储介质及电子设备 |
-
2021
- 2021-05-31 CN CN202110599985.4A patent/CN113282626A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108829413A (zh) * | 2018-05-07 | 2018-11-16 | 北京达佳互联信息技术有限公司 | 数据更新方法、装置及计算机可读存储介质、服务器 |
CN111190928A (zh) * | 2019-12-24 | 2020-05-22 | 平安普惠企业管理有限公司 | 缓存处理方法、装置、计算机设备以及存储介质 |
CN111459658A (zh) * | 2020-03-10 | 2020-07-28 | 中国平安人寿保险股份有限公司 | 一种资源数据获取方法及相关设备 |
CN112052263A (zh) * | 2020-07-13 | 2020-12-08 | 浙江大搜车软件技术有限公司 | 请求指令处理的方法、系统、计算机设备和可读存储介质 |
CN112328632A (zh) * | 2020-10-09 | 2021-02-05 | 福建亿榕信息技术有限公司 | 一种分布式两级缓存的方法和系统 |
CN112711730A (zh) * | 2021-01-21 | 2021-04-27 | 上海观察者信息技术有限公司 | 一种数据的缓存方法、装置、存储介质及电子设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114331576A (zh) * | 2021-12-30 | 2022-04-12 | 福建博思软件股份有限公司 | 基于高并发场景下的电子票号快速取票方法及存储介质 |
CN115314423A (zh) * | 2022-07-19 | 2022-11-08 | 杭州安恒信息技术股份有限公司 | 流量数据统计方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11334562B2 (en) | Blockchain based data management system and method thereof | |
US11481765B2 (en) | Blockchain-based transaction processing method and apparatus and electronic device | |
US10810164B2 (en) | Securing access to functionality of a file-based write filter | |
US11502828B2 (en) | Authenticating chaincode to chaincode invocations of a blockchain | |
EP3816912B1 (en) | Blockchain-based transaction processing method and apparatus, and electronic device | |
US9591030B1 (en) | Lock-free updates to a domain name blacklist | |
CN113282626A (zh) | 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 | |
CN111464487B (zh) | 访问控制方法、装置及系统 | |
US11468175B2 (en) | Caching for high-performance web applications | |
WO2018063947A1 (en) | Generating short-term signatures for accessing cloud storage | |
US9264399B1 (en) | Lock-free updates to a domain name blacklist | |
EP3975499A1 (en) | Authentication method and device, computing equipment and medium | |
US20150178492A1 (en) | Secure information flow | |
US11394748B2 (en) | Authentication method for anonymous account and server | |
CN112015563A (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
US20180069859A1 (en) | Mobile terminal and control method thereof | |
US7644286B1 (en) | System and method for restricting data access | |
CN114036195A (zh) | 一种数据请求处理方法、装置、服务器和存储介质 | |
US11301557B2 (en) | System and method for data processing device management | |
US11431711B2 (en) | Method, device and computer program product for service access | |
CN111259375A (zh) | 应用于物联网操作系统的访问请求的处理方法及装置 | |
WO2017189209A1 (en) | Gateway policy enforcement and service metadata binding | |
CN116401721A (zh) | 数据处理方法、系统、设备及存储介质 | |
US9769282B2 (en) | Mobile terminal for performing weight based function with military purpose and control method thereof | |
CN113783923A (zh) | Web页面防刷处理方法、装置、设备以及存储介质 |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211026 Address after: 518000 1601 (unit 18), Qianhai free trade building, 3048 Xinghai Avenue, Nanshan street, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong Province Applicant after: Shenzhen saiante Technology Service Co.,Ltd. Address before: 1-34 / F, Qianhai free trade building, 3048 Xinghai Avenue, Mawan, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong 518000 Applicant before: Ping An International Smart City Technology Co.,Ltd. |