一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据反馈方法及装置、存储介质及电子设备与流程

2022-06-11 12:57:45 来源:中国专利 TAG:
1.本发明涉及互联网
技术领域
:,特别涉及一种数据反馈方法及装置、存储介质及电子设备。
背景技术
::2.随着互联网行业的高速发展,人们可以通过网络对各种应用系统进行访问,从而得到对应的数据或是得到对应的服务。目前,应用系统的数据通常采用redis集群进行保存,redis集群中通常保存着应用的各个热key的数据,用户通过访问热key可以获取redis集群中的数据。3.随着应用系统的使用人数的增多,应用系统的访问量在不断的增加,经常会出现某个时间点的访问量瞬间激增的现象,导致redis集群中的某个热key被频繁访问,导致短时间内访问redis集群的次数超过了系统的可处理能力,导致出现应用系统崩溃的情况。技术实现要素:4.有鉴于此,本发明提供一种数据反馈方法及装置、存储介质及电子设备,可以有效降低对应用系统的redis集群的访问量,避免应用系统因短时间内访问量过多导致系统崩溃的情况。5.为实现上述目的,本发明实施例提供如下技术方案:6.本发明第一方面公开一种数据反馈方法,包括:7.接收服务请求;8.在各个预设的热key中确定与所述服务请求对应的热key,并将该热key确定为目标热key;9.将各个预设的计数器中属于所述目标热key的计数器确定为目标计数器;10.更新所述目标计数器中的计数值,并判断所述目标计数器中更新后的计数值是否等于预设的计数阈值;11.若确定所述目标计数器中更新后的计数值等于所述计数阈值,则调用预设的redis集群向所述服务请求的请求方反馈响应数据,并更新所述redis集群中所述目标热key的请求统计量。12.上述的方法,可选的,所述在各个预设的热key中确定与所述服务请求对应的热key,包括:13.获取所述服务请求中的key信息;14.将所述key信息与预设的各个热key逐一进行匹配;15.将与所述key信息相匹配的热key确定为与所述服务请求对应的热key。16.上述的方法,可选的,所述调用预设的redis集群向所述服务请求的请求方反馈响应数据,包括:17.将所述服务请求添加至与所述目标热key对应的请求队列中;18.在所述redis集群中确定所述目标热key所属的节点集群,所述节点集群中包含多个服务节点;19.将所述请求队列中的每个服务请求分配至对应的服务节点;20.对于所述请求队列中的每个服务请求,调用与该服务请求对应的服务节点向该服务请求的请求方反馈与所述目标热key对应的响应数据。21.上述的方法,可选的,还包括:22.若确定所述目标计数器中更新后的计数值不等于所述计数阈值,则将所述服务请求添加至与所述目标热key对应的请求队列中。23.上述的方法,可选的,还包括:24.将所述目标计数器进行初始化处理。25.本发明第二方面公开一种数据反馈装置,包括:26.接收单元,用于接收服务请求;27.第一确定单元,用于在各个预设的热key中确定与所述服务请求对应的热key,并将该热key确定为目标热key;28.第二确定单元,用于将各个预设的计数器中属于所述目标热key的计数器确定为目标计数器;29.更新单元,用于更新所述目标计数器中的计数值,并判断所述目标计数器中更新后的计数值是否等于预设的计数阈值;30.调用单元,用于若确定所述目标计数器中更新后的计数值等于所述计数阈值,则调用预设的redis集群向所述服务请求的请求方反馈响应数据,并更新所述redis集群中所述目标热key的请求统计量。31.上述的装置,可选的,所述第一确定单元,包括:32.获取模块,用于获取所述服务请求中的key信息;33.匹配模块,用于将所述key信息与预设的各个热key逐一进行匹配;34.第一确定模块,用于将与所述key信息相匹配的热key确定为与所述服务请求对应的热key。35.上述的装置,可选的,所述调用单元,包括:36.添加模块,用于将所述服务请求添加至与所述目标热key对应的请求队列中;37.第二确定模块,用于在所述redis集群中确定所述目标热key所属的节点集群,所述节点集群中包含多个服务节点;38.分配模块,用于将所述请求队列中的每个服务请求分配至对应的服务节点;39.调用模块,用于对于所述请求队列中的每个服务请求,调用与该服务请求对应的服务节点向该服务请求的请求方反馈与所述目标热key对应的响应数据。40.上述的装置,可选的,还包括:41.添加单元,用于若确定所述目标计数器中更新后的计数值不等于所述计数阈值,则将所述服务请求添加至与所述目标热key对应的请求队列中。42.上述的装置,可选的,还包括:43.初始化单元,用于将所述目标计数器进行初始化处理。44.本发明第三方面公开一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行如上所述的数据反馈方法。45.本发明第四方面公开一种电子设备,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行如上所述的数据反馈方法。46.本发明提供一种数据反馈方法及装置、存储介质及电子设备,该方法包括:接收服务请求;在各个预设的热key中确定与服务请求对应的热key,并将该热key确定为目标热key;将各个预设的计数器中属于目标热key的计数器确定为目标计数器;更新目标计数器中的计数值,并判断目标计数器中更新后的计数值是否等于预设的计数阈值;若等于,则调用预设的redis集群向服务请求的请求方反馈响应数据,并更新redis集群中所述目标热key的请求统计量。在接收到服务请求后,先确定与服务请求对应的目标热key,再更新与目标热key对应的计数器的计数值,在更新后的计数值等于预设的计算阈值时,调用redis集群向服务请求对应的请求方反馈响应数据,由此可以压缩redis集群的调用次数,以及减少与redis集群的连接,避免短时间出现大量的访问导致系统崩溃的情况。附图说明47.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。48.图1为本发明实施例提供的一种数据反馈方法的方法流程图;49.图2为本发明实施例提供的确定与服务请求对应的热key的方法流程图;50.图3为本发明实施例提供的向服务请求的请求方反馈响应数据的方法流程图;51.图4为本发明实施例提供的一种数据反馈装置的结构示意图;52.图5为本发明实施例提供的一种电子设备的结构示意图。具体实施方式53.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。54.在本技术中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。55.对本发明中应用到的术语进行解释:56.redis热key:突然很大量的请求访问redis的某个特定key。57.incr:redis的一种命令,将key种存储的数字值增加一。58.incrby:redis的一种命令,将key种存储的数字加上指定的增量值n。59.hashmap:基于哈希表的map接口的实现,是非线程安全的。60.concurrenthashmap:一种线程安全且高效的容器。61.由
背景技术
:可知,应用系统在某个时间点出现的访问量激增是亿级访问量的应用系统中经常会出现的情况,例如:双十一电商系统商品秒杀、微博出现某个爆点新闻、12306火车票抢购等情况都会导致系统在某个时间点的访问量激增,这会使系统出现redis热key问题,这会导致redis中某个key被频繁访问,在访问量超出redis集群连接数时,redis集群将无法支撑,出现响应变慢甚至系统服务崩溃等情况。62.本发明提供一种数据反馈方法及装置,可以在出现大量的访问请求时压缩访问redis集群的次数,从而减少访问redis集群的次数,避免在应用系统在短时间内的访问量出现系统崩溃的情况。63.本发明的执行主体可以为应用系统中的服务器或是处理器,本发明可用于应用系统、众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。64.参照图1,为本发明实施例提供的一种数据反馈方法的方法流程图,具体说明如下所述:65.s101:接收服务请求。66.服务请求为需要获取应用系统的数据或是需要使用应用系统的服务的请求方发送的请求;具体的,服务请求中包括但不限于请求方信息和需求信息,示例性的,请求方信息包括但不限于ip地址信息、用户信息、终端信息等,需求信息包括但不限于key信息、请求时间等。67.优选的,在接收到多个服务请求时,也可以应用本发明提供的方式同时对各个服务请求进行处理。68.s102:在各个预设的热key中确定与服务请求对应的热key,并将该热key确定为目标热key。69.参照图2,为本发明实施例提供的确定与服务请求对应的热key的方法流程图,具体说明如下所述:70.s201:获取服务请求中的key信息。71.对服务请求进行解析,进而获取服务请求中的key信息,优选的,key信息中可以包括请求方需要访问的服务的热key的标识、热key的名称以及热key的创建时间等。72.s202:将key信息与预设的各个热key逐一进行匹配。73.预设的热key也存在对应的信息,将获得的key信息与每个预设的热key的信息进行比对,从而可以寻找到与key信息匹配的热key,该热key的信息和key信息相同。74.s203:将与key信息相匹配的热key确定为与服务请求对应的热key。75.基于从服务请求中得到的key信息,可以将确定出与服务请求对应的热key,进而可以在多个热key中确定出目标热key。优选的,一个服务请求只存在一个对应的热key,基于服务请求中的key信息,可以精确的在各个预设的热key中精确的确定出目标热key,确保后续反馈数据的准确性。76.s103:将各个预设的计数器中属于目标热key的计数器确定为目标计数器。77.本发明实施例提供的方法中,redis集群中设置了多个计数器,每个计数器存在一个对应的热key。优选的,计数器可以使用利用concurrenthashmap来实现,由此可以保证redis集群中的线程安全。78.s104:更新目标计数器中的计数值,并判断目标计数器中更新后的计数值是否等于预设的计数阈值;若确定目标技术器中更新后的计数值等于计数阈值,则执行s105;若确定目标计数器中更新后的计数值不等于计数值,则执行s106。79.优选的,每次更新目标计数器中的计数值时,可以是将目标计数器中当前的计数值加一,从而完成对目标计数器中的计数值的更新;示例性,目标计数器中当前的计数值为98,在对目标计数器中的计数值进行后,目标计数器中的计数值为99。80.进一步的,在更新目标计数器中的计数值后,需要判断目标计数器中更新后的计数值是否等于预设的计数阈值,计数阈值可以根据实际需求进行设置,如计数阈值为100。81.s105:调用预设的redis集群向服务请求的请求方反馈响应数据,并更新redis集群中目标热key的请求统计量。82.需要说明的是,调用redis集群即为访问redis集群。83.参照图3,为本发明实施例提供的向服务请求的请求方反馈响应数据的方法流程图,具体说明如下所述:84.s301:将服务请求添加至与目标热key对应的请求队列中。85.优选的,每个热key均设置了一个请求队列,该请求队列用于保存请求该热key的服务请求。86.在确定目标计数器更新后的计数值等于计数阈值后,需要将服务请求保存至请求队列中。87.s302:在redis集群中确定目标热key所属的节点集群,节点集群中包含多个服务节点。88.redis集群中包含多个节点集群,每个节点集群均存在对应的一个热key,每个节点集群中包含多个服务节点。89.优选的,可以根据目标热key的节点集群标识,在各个节点集群中确定目标热key所属的节点集群。90.s303:将请求队列中的每个服务请求分配至对应的服务节点。91.在将请求队列中的每个服务请求分配至对应的服务节点时,可以根据每个服务节点的运行信息进行分配,运行信息包括但不限于空闲计算资源、cpu运行信息等,可以根据每个服务节点的运行信息确定每个服务节点的可分配请求数,基于每个服务节点的可分配请求数为每个服务节点分配服务请求,优选的,对于每个服务节点,从请求队列中随机提取分配给该服务节点的各个服务请求,提取出的各个服务请求的个数等于该服务节点的可分配请求数,进一步的,该服务节点即为提取出的各个服务请求对应的服务节点。92.s304:对于请求队列中的每个服务请求,调用与该服务请求对应的服务节点向该服务请求的请求方反馈与目标热key对应的响应数据。93.在为每个服务节点分配服务请求后,对于每个服务节点,该服务节点需要将与目标热key对应的响应数据反馈给为其分配的每个服务请求的请求方。94.优选的,在向服务请求的请求方反馈响应数据后,需要更新redis集群中目标热key的请求统计量,具体可以为将redis集群中目标热key的当前的请求统计量加上计数阈值的数值,示例性的,计数阈值为100,redis集群中目标热key的当前的请求统计量为1000,则更新后的目标热key的请求统计量为1100。95.优选的,在更新redis集群中目标热key的请求统计量后,需要将目标计数器进行初始化处理,具体可以为将目标计数器中的计数值清空或是重置为初始值,具体的,初始值为0。96.本发明实施例提供的方法中,在热key更新后的计数值等于预设的计数阈值时,可调用redis集群向服务请求的请求方反馈响应数据,由此可以有效的压缩访问redis集群的次数,减少redis集群的处理量,并且每个热key均存在多个对应的服务节点,由此可以将各个服务请求分散处理,将处理压力分散,从而避免应用系统崩溃。97.s106:将服务请求添加至与目标热key对应的请求队列中。98.本发明实施例提供的方法中,在目标计数器中更新后的计数值不等于计数阈值的情况下,需要将服务请求添加至与目标热key对应的请求队列中,直到目标计数器中更新后的计数值等于计数阈值时,可以执行步骤s105。99.本发明实施例提供的方法中,接收服务请求;在各个预设的热key中确定与服务请求对应的热key,并将该热key确定为目标热key;将各个预设的计数器中属于目标热key的计数器确定为目标计数器;更新目标计数器中的计数值,并判断目标计数器中更新后的计数值是否等于预设的计数阈值;若等于,则调用预设的redis集群向服务请求的请求方反馈响应数据,并更新redis集群中所述目标热key的请求统计量。在接收到服务请求后,先确定与服务请求对应的目标热key,再更新与目标热key对应的计数器的计数值,在更新后的计数值等于预设的计算阈值时,调用redis集群向服务请求对应的请求方反馈响应数据,由此可以压缩redis集群的调用次数,以及减少与redis集群的连接,避免短时间出现大量的访问导致系统崩溃的情况。100.示例性的,本发明可以解决亿级访问量的应用系统的redis热key问题,本发明通过采用热key拆分和缓存计数结合的方式可以降低应用系统中的访问,本发明以亿级访问量应用程序中广告版面的某个广告的访问量统计功能为例,针对采集访问量过程中出现的redis热key问题进行改进,实现了一款亿级访问量应用系统的redis热key处理器,在分散访问请求的基础上,给热key定义一个计量数为0,每次访问先更新计量数加1,当计量数达到自定义的上限n时,n为预设的数值,具体为正整数,才访问redis更新总访问量加n,将redis中key的访问次数降低到1/n,解决redis热key问题。进一步的,当有多个key时,本发明采用的是通过map封装多个key的计量数的方式来处理,其中map采用concurrenthashmap代替hashmap来保证线程安全,解决了因hashmap在多线程下的扩容引起环形链表,导致线程死循环,出现cpu占用100%的问题,进而还解决了并发访问带来的多key管理、连接数控制、cpu占用率等问题。101.需要说明的是,当存在单个key时,计数器可以使用integer实现,通过定义一个integer来计量数,初始值为0,每访问一次计量数加1,当计量数达到100的时候,执行redis的incrby命令,更新key的数值加100,然后恢复计数值为0。这样可以将原有的每100次incr调用降低到1次incrby调用。102.在存在多个key时,参照单个key的解决思路,也是在java代码中计数,达到100时再执行一次incrby命令,但是和单个key不同的是这次是多个key,没法再用一个integer来计数了,所以使用了一个map来对多个key进行计数。103.在功能优化过程中,最开始用到的是hashmap对key进行计数,但是在后续系统运行过程中出现服务器cpu异常,平时4%左右的cpu会一下蹦到20%,几小时后50%,最终都会上升到100%的cpu占用并导致该节点服务挂掉。排查后发现是jdk1.6的环境中,hashmap在多线程下的扩容会引起环形链表,导致当前线程进入死循环,造成cpu占用上升,甚至会达到100%占用,从而引起节点服务挂掉的情况,决定使用线程安全的concurrenthashmap来对多个key进行计数。104.在jdk1.6环境下,hashmap导致上述现象出现的具体原因和使用concurrenthashmap替换的原因具体分析如下:105.1)、hashmap的成环原因:106.hashmap是一个非线程安全的集合,并发情况下可能会出现链表成环的问题,形成死循环。导致成环的代码是出现在transfer代码中,也就是就扩容之后的数据迁移部分。107.在具体的实现过程中,首先获取新表的长度,之后遍历新表的每一个entry,然后每个entry中的链表以反转的形式形成rehash之后的链表。假设有map某个桶位置有a、b,现在要插入c,插入c发生扩容,进入上述代码,我们理想投插入法插入后的顺序是c-》b-》a,结合代码看,第一个循环for(entry《k,v》e:table)遍历的是旧链表,e为第一个元素,next为下一个元素,中奖三行是为了确定新链表在数据的一个位置,首先插入是从投开始插入的。108.当遇到并发多线程扩容问题时,例如并发线程a、b。假设线程a先执行,执行到entry《k,v》next=e.next,执行完这段代码,即next指向b,线程a挂起;接着线程b执行,此时线程b执行成功,链表顺序更改为c-》b-》a;然后,线程a恢复执行,在头部插入a时,next指向b,因为线程b已经将b.next指向a,这样就使得map遍历或者插入一直死循环,导致cpu飙升。109.2)、使用concurrenthashmap替换hashmap的原因:110.concurrenthashmap是线程安全的集合,是由一个segment数组和多个hashentry组成。segment数据的意义就是将一个大的table分割成多个小的table来进行加锁,即锁分离技术,首先将数据分成一段一段存储,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,写操作的时候可以只对元素所在的segment进行加锁即可,理想情况下concurrenthashmap可以最高同时支持segment数量大小的写操作。因此,使用concurrenthashmap可以避免出现多个线程同时访问并操作同一段数据,进而避免出现形成换线链表导致死循环,解决hashmap闭环导致的cpu飙升问题。111.本发明在利用多缓存服务器分散请求的基础上,从根源出发,利用concurrenthashmap来对多个key进行计数,当某个key的计数达到最大值n时,再访问reids更新改key的值,从而降低redis的访问次数,可以很大程度上减少某个key的调用,从而解决redis热key问题。112.参照图4,为本发明实施例提供的一种数据反馈装置的结构示意图,该装置可以应该在亿级访问量的应用系统中,该装置用于支持图1所示的方法在现实生活中的实现,具体说明如下所述:113.接收单元401,用于接收服务请求;114.第一确定单元402,用于在各个预设的热key中确定与所述服务请求对应的热key,并将该热key确定为目标热key;115.第二确定单元403,用于将各个预设的计数器中属于所述目标热key的计数器确定为目标计数器;116.更新单元404,用于更新所述目标计数器中的计数值,并判断所述目标计数器中更新后的计数值是否等于预设的计数阈值;117.调用单元405,用于若确定所述目标计数器中更新后的计数值等于所述计数阈值,则调用预设的redis集群向所述服务请求的请求方反馈响应数据,并更新所述redis集群中所述目标热key的请求统计量。118.本发明实施例提供的装置中,接收服务请求;在各个预设的热key中确定与服务请求对应的热key,并将该热key确定为目标热key;将各个预设的计数器中属于目标热key的计数器确定为目标计数器;更新目标计数器中的计数值,并判断目标计数器中更新后的计数值是否等于预设的计数阈值;若等于,则调用预设的redis集群向服务请求的请求方反馈响应数据,并更新redis集群中所述目标热key的请求统计量。在接收到服务请求后,先确定与服务请求对应的目标热key,再更新与目标热key对应的计数器的计数值,在更新后的计数值等于预设的计算阈值时,调用redis集群向服务请求对应的请求方反馈响应数据,由此可以压缩redis集群的调用次数,以及减少与redis集群的连接,避免短时间出现大量的访问导致系统崩溃的情况。119.本发明实施例提供的装置中,该装置中的所述第一确定单元402,还可以配置为:120.获取模块,用于获取所述服务请求中的key信息;121.匹配模块,用于将所述key信息与预设的各个热key逐一进行匹配;122.第一确定模块,用于将与所述key信息相匹配的热key确定为与所述服务请求对应的热key。123.本发明实施例提供的装置中,该装置中的所述调用单元405,还可以配置为:124.添加模块,用于将所述服务请求添加至与所述目标热key对应的请求队列中;125.第二确定模块,用于在所述redis集群中确定所述目标热key所属的节点集群,所述节点集群中包含多个服务节点;126.分配模块,用于将所述请求队列中的每个服务请求分配至对应的服务节点;127.调用模块,用于对于所述请求队列中的每个服务请求,调用与该服务请求对应的服务节点向该服务请求的请求方反馈与所述目标热key对应的响应数据。128.本发明实施例提供的装置中,该装置还可以包括:129.添加单元,用于若确定所述目标计数器中更新后的计数值不等于所述计数阈值,则将所述服务请求添加至与所述目标热key对应的请求队列中。130.本发明实施例提供的装置中,该装置还可以包括:131.初始化单元,用于将所述目标计数器进行初始化处理。132.本发明实施例还提供了一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述数据反馈方法。133.本发明实施例还提供了一种电子设备,其结构示意图如图5所示,具体包括存储器501,以及一个或者一个以上的指令502,其中一个或者一个以上指令502存储于存储器501中,且经配置以由一个或者一个以上处理器503执行所述一个或者一个以上指令502进行上述数据反馈方法。134.上述各个实施例的具体实施过程及其衍生方式,均在本发明的保护范围之内。135.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。136.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。137.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献