CN109086049B - 遍历用户在线状态数据的方法 - Google Patents

遍历用户在线状态数据的方法 Download PDF

Info

Publication number
CN109086049B
CN109086049B CN201810828066.8A CN201810828066A CN109086049B CN 109086049 B CN109086049 B CN 109086049B CN 201810828066 A CN201810828066 A CN 201810828066A CN 109086049 B CN109086049 B CN 109086049B
Authority
CN
China
Prior art keywords
function
loop
data
state data
condition
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
Application number
CN201810828066.8A
Other languages
English (en)
Other versions
CN109086049A (zh
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.)
Beijing Jinher Software Co Ltd
Original Assignee
Beijing Jinher Software 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 Beijing Jinher Software Co Ltd filed Critical Beijing Jinher Software Co Ltd
Priority to CN201810828066.8A priority Critical patent/CN109086049B/zh
Publication of CN109086049A publication Critical patent/CN109086049A/zh
Application granted granted Critical
Publication of CN109086049B publication Critical patent/CN109086049B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种遍历用户在线状态数据的方法,本方法中采用将缓存在多重嵌套循环结构中的用户状态数据利用一个个单一循环进行遍历,其中,每个单一循环用loop函数、condition函数和callback函数定义。本方法中通过三个函数组成的单一循环进行用户状态数据的遍历,将整个遍历过程变得十分简洁明了,降低多重嵌套循环代码维护开发工作的难度,很大提升开发和维护复杂嵌套遍历用户状态数据逻辑工作的效率。

Description

遍历用户在线状态数据的方法
技术领域
本发明涉及用户在线状态数据处理领域。更具体地说,本发明涉及一种遍历用户在线状态数据的方法。
背景技术
在服务器端,例如消息推送过程,经常会遇到向所有用户中某些满足匹配条件的用户推送消息的情况,这时就不可避免的需要遍历查找用户在线状态数据。目前很多后台服务端都是采用高速缓存来存储用户状态数据,高速缓存一般都是采用键值对(key,value)格式作为存储结构,每个键值对存储的一般为单一一种类型的用户状态数据,复杂一点的情况时value也可能会是一组数据的集合,或者遇到不确定主键key的情况,这里就需要遍历这些用户状态数据。并且,很多时候(例如,推送消息时),需要同时使用多种用户状态数据,这就需要使用多重嵌套循环的方式来实现用户状态数据的遍历,进而找出目标用户。
多重嵌套循环在大多数语言中一般都是使用for、while等用于循环处理的语句,当循环代码行数较多而且存在各种循环嵌套时,存在着复杂的循环体起始与终止等对应关系,代码的易读性不是很好,随着逻辑日益复杂,服务和代码的后期维护工作的难度会陡增。
为了解决这些缺陷,人们往往是采用了尽可能降低多重嵌套循环的循环层数以及减少循环内代码行数,一般做法是通过封装遍历时的循环体内部的代码来减少行数和循环层数,但是,剩下的循环代码往往在后期维护中不会经常更改升级,而往往循环体内部代码因各种需求,需要不断更新完善,就存在修改未封装的循环控制逻辑代码和修改封装循环体内部代码的2种可能,我们还是受到复杂的循环嵌套结构的复杂对应关系的困扰,遍历用户状态数据代码维护难度依旧存在,因此,我们在此基础上,设计了一种遍历用户在线状态数据的方法。
发明内容
本发明的一个目的是解决至少上述问题,并提供至少后面将说明的优点。
本发明的一个目的是提供一种遍历用户在线状态数据的方法,本方法中采用将缓存在多重嵌套循环结构中的用户状态数据利用一个个单一循环进行遍历,其中,每个单一循环用loop函数、condition函数和callback函数定义。本方法中通过三个函数组成的单一循环进行用户状态数据的遍历,将整个遍历过程变得十分简洁明了,降低多重嵌套循环代码维护开发工作的难度,很大提升开发和维护复杂嵌套遍历用户状态数据逻辑工作的效率。
为了实现根据本发明的目的和其它优点,提供了一种遍历用户在线状态数据的方法,包括:
步骤一、利用多个数据属性,将缓存的用户状态数据转化为多重嵌套循环结构;
步骤二、将多重嵌套循环结构中的每个单一循环用loop函数、condition函数和callback函数定义;
步骤三、通过依次调用每个单一循环的loop函数、condition函数和callback函数来遍历用户状态数据。
优选的是,所述的遍历用户在线状态数据的方法,每个单一循环中的condition函数和callback函数界定了用户状态数据的属性。
优选的是,所述的遍历用户在线状态数据的方法,loop函数对每个单一循环中loop函数、condition函数和callback函数的调用与否和调用顺序进行控制。
优选的是,所述的遍历用户在线状态数据的方法,condition函数依据其内设定的多个条件关系对每个单一循环中的用户状态数据进行筛选。
优选的是,所述的遍历用户在线状态数据的方法,一个单一循环中调用condition函数,调用结果判定为“False”时,结束遍历一个单一循环的用户状态数据,进入下一个单一循环的loop函数。
优选的是,所述的遍历用户在线状态数据的方法,callback函数中还包括对其关联的condition函数筛选的数据做进一步处理的程序,以得到具体的用户状态数据。
优选的是,所述的遍历用户在线状态数据的方法,所述callback函数还包括在其内关联下一层单一循环,以通过下一层单一循环遍历目标用户状态数据。
优选的是,所述的遍历用户在线状态数据的方法,与一个单一循环关联的下一层单一循环中具有重新定义的loop函数、condition函数和callback函数。
本发明至少包括以下有益效果:
第一、本发明中构建了一种遍历用户状态的架构方法,将缓存的用户状态数据利用一个个单一循环进行遍历,在并发执行所具有的高效率前提下,将复杂的数据搜索过程变得十分简洁,数据存储的代码一目了然,使搜索过程简单而快捷。
第二、本发明中每个单一循环由loop函数、condition函数和callback函数组成,避免了多重嵌套循环中的多种条件关系的叠加复合,将整个遍历数据的过程变得十分简单而简明。
第三、本发明中每个单一循环不是一样的,而是具有单一性的,且一个单一循环关联的另一个单一循环,构成了循环的嵌套,将复杂的数据遍历过程变得具有条理化,层次分明,可读性很好,降低多重嵌套循环代码维护开发工作的难度,很大提升开发和维护复杂嵌套遍历用户状态数据逻辑工作的效率。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1为本发明在一个实施例中的遍历用户状态数据方法的示意图。
具体实施方式
下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
需要说明的是,下述实施方案中所述实验方法,如无特殊说明,均为常规方法,所述试剂和材料,如无特殊说明,均可从商业途径获得;在本发明的描述中,术语“横向”、“纵向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,并不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和架构,因此不能理解为对本发明的限制。
如图1所示,本发明提供一种遍历用户在线状态数据的方法,包括:
步骤一、利用多个数据属性,将缓存的用户状态数据转化为多重嵌套循环结构;
这种多重嵌套循环一般存在多种相互叠加的依据数据属性建立的条件关系,当缓存的数据多且杂时,循环代码行数较多而且存在各种循环嵌套时,存在着复杂的循环体起始与终止等对应关系,会使对数据的遍历工作变得十分艰难;
步骤二、将多重嵌套循环结构中的每个单一循环用loop函数、condition函数和callback函数定义;
把整个遍历用户状态的多重循环嵌套进行分解,分解为一个个单一的循环,每一层循环分为三个部分,三个部分分别由一个函数方法组成,三个函数方法分别是loop函数方法、condition函数方法和callback函数方法;
其中,每个单一循环中的Loop函数利用condition函数和callback函数界定了用户状态数据的属性,Loop函数一般放置在基础架构逻辑代码中,这部分一旦完成一般不会变更,且loop函数对每个单一循环中loop函数、condition函数和callback函数的调用与否和调用顺序进行控制,即loop函数控制了每个单一循环运行到那一步,下一步是否运行,是否调用三个函数;
condition函数依据其内设定的多个条件关系对每个单一循环中的用户状态数据进行筛选,condition函数中包含判断本次循环是否执行callback函数方法的逻辑,负责当前循环遍历到数据的具体条件匹配筛选,Condition函数一般放置在业务架构逻辑代码中,这部分可能会随业务需求变化随时变更;
callback函数中还包括对其关联的condition函数筛选的数据做进一步处理的程序,以得到具体的用户状态数据,Callback函数中只需关注当前循环中找到匹配条件的用户状态数据后如何处理,具体循环控制细节部分不应该出现这里,callback函数一般放置在业务架构逻辑代码中,也可以与Condition函数放一起,callback函数可能会随业务需求变化随时变更;
步骤三、通过依次调用每个单一循环的loop函数、condition函数和callback函数来遍历用户状态数据;
其中,调用一个单一循环中的loop函数后,依据其设定的循环条件对调用结果进行判定:
当判定为“True”时,继续调用condition函数;
当判定为“False”时,结束用户状态数据的遍历;
调用一个单一循环中的condition函数后,对调用结果进行判定:
当判定为“True”时,继续调用callback函数;
当判定为“False”时,调用下一个单一循环中的loop函数;
调用一个单一循环中的callback函数后,对调用结果进行判定:
当得到唯一的具体用户状态数据时,结束用户状态数据的遍历;
当未得到唯一的具体用户状态数据时,进入单一循环关联的下一层单一循环中的loop函数,继续进行数据遍历。
例如,一组数据:数据1具有属性a,数据2具有属性b,数据3具有属性c,d,其中,属性a、b、c、d均不相关;
数据1、数据2和数据3依据数据属性均缓存于多重嵌套循环的缓存数据结构中,以键值对的形式在存储,数据1、数据2和数据3分别有各自的键key1,key2,key3,数据1、数据2和数据3的值分别有各自的字段和具体值的对应组合数据结构为(字段1,a),(字段2,b),(字段3,(c,d)),其中,一个键对应存在多个字段,同一个键下面同一个字段仅对应唯一的值,属性a、b、c、d之间通过键和字段进行关系映射;
定义对键下所有字段进行遍历的循环,数据1、数据2和数据3分别对应单一循环A、B和C,循环A仅处理数据1属性a缓存结构,循环B仅处理数据2属性b缓存结构,循环C仅处理数据3属性(c,d)缓存结构;
在单一循环A中处理数据1,处理针对数据1属性a的遍历。当调用loop函数后,对调用结果进行判定,判定为“True”,继续调用condition函数,再次对调用结果,这里指对属性a进行判定,若判定为“True”,继续调用callback函数,得出具体的数据1:(字段名1,a);
具体数据1内容是单一循环A找到的当前键和字段名,作为参数得到数据2的一个筛选子集,在单一循环A的callback函数中调用单一循环B的loop函数对这个数据子集进行遍历;
在单一循环B中处理数据2的子集,处理针对数据2属性b的遍历。当调用loop函数后,对调用结果进行判定,判定为“True”,继续调用condition函数,再次对调用结果,这里指对属性b进行判定,判定为“false”,进入下一个循环去遍历其他用户在线数据,判定为“True”,调用callback函数,得出具体的数据2:(字段名2,b);
具体数据2内容是单一循环B找到的当前键和字段名,作为参数得到数据3的一个筛选子集,在单一循环B的callback函数中调用单一循环C的loop函数对这个数据子集进行遍历;
在单一循环C中处理数据3的筛选子集时,处理针对数据3属性(c,d)的遍历,当调用loop函数后,对调用结果进行判定,判定为“True”,继续调用condition函数,再次对调用结果,这里指对属性(c,d)进行判定,判定为“True”,调用callback函数,得出具体的数据3;
具体数据3为对在线属性a、b、c、d进行条件判断后的数据结果,数据的在线属性是依据客户在线状态的痕迹进行划分的,在一个App中不同的登录状态之间具有关联性和一定顺序性,这些不同登录状态显示的客户的在线数据构成了客户的在线数据属性,且数据属性具有可变性。
本发明的应用:依据每个单一循环的loop函数、condition函数和callback函数进行用户状态数据的遍历,优化了使用多重循嵌套遍历用户状态数据的架构,把整个遍历用户状态的多重循环嵌套进行分解,分解为一个个单一的循环。在日常针对查找用户状态数据的开发和维护工作,我们仅需关注和修改condition和callback函数部分,仅了解循环遍历的是何种用户状态数据即可,无需投入更多精力关注loop中具体的嵌套循环遍历对应细节,降低使用多重嵌套循环遍历用户数据状态代码的维护难度,提高相关遍历代码维护和开发工作的效率。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。

Claims (1)

1.遍历用户在线状态数据的方法,其特征在于,包括:
步骤一、利用多个数据属性,将缓存的用户状态数据转化为多重嵌套循环结构;
步骤二、将多重嵌套循环结构中的每个单一循环用loop函数、condition函数和callback函数定义;
步骤三、通过依次调用每个单一循环的loop函数、condition函数和callback函数来遍历用户状态数据;
每个单一循环中的condition函数和callback函数界定了用户状态数据的属性;
loop函数对每个单一循环中loop函数、condition函数和callback函数的调用与否和调用顺序进行控制;
condition函数依据其内设定的多个条件关系对每个单一循环中的用户状态数据进行筛选;
一个单一循环中调用condition函数,调用结果判定为“False”时,结束遍历一个单一循环的用户状态数据,进入下一个单一循环的loop函数;
callback函数中还包括对其关联的condition函数筛选的数据做进一步处理的程序,以得到具体的用户状态数据;
所述callback函数还包括在其内关联下一层单一循环,以通过下一层单一循环遍历目标用户状态数据;
与一个单一循环关联的下一层单一循环中具有重新定义的loop函数、condition函数和callback函数。
CN201810828066.8A 2018-07-25 2018-07-25 遍历用户在线状态数据的方法 Active CN109086049B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810828066.8A CN109086049B (zh) 2018-07-25 2018-07-25 遍历用户在线状态数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810828066.8A CN109086049B (zh) 2018-07-25 2018-07-25 遍历用户在线状态数据的方法

Publications (2)

Publication Number Publication Date
CN109086049A CN109086049A (zh) 2018-12-25
CN109086049B true CN109086049B (zh) 2021-11-02

Family

ID=64838628

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810828066.8A Active CN109086049B (zh) 2018-07-25 2018-07-25 遍历用户在线状态数据的方法

Country Status (1)

Country Link
CN (1) CN109086049B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1918546A (zh) * 2004-02-12 2007-02-21 松下电器产业株式会社 程序转换装置及程序转换方法
CN101271397A (zh) * 2007-03-23 2008-09-24 北京大学 一种嵌套循环结构的识别方法
CN107506226A (zh) * 2017-07-07 2017-12-22 福建师范大学 一种用于hls指令优化的编码方法及终端

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427913B1 (en) * 1998-09-11 2002-08-06 Key-Trak, Inc. Object control and tracking system with zonal transition detection
US20100050156A1 (en) * 2008-08-20 2010-02-25 International Business Machines Corporation Using build history information to optimize a software build process
US9038042B2 (en) * 2012-06-29 2015-05-19 Analog Devices, Inc. Staged loop instructions
US9201638B2 (en) * 2012-08-07 2015-12-01 Nec Laboratories America, Inc. Compiler-guided software accelerator for iterative HADOOP® jobs
US9256410B2 (en) * 2012-08-09 2016-02-09 Apple Inc. Failure profiling for continued code optimization
CN105393217B (zh) * 2013-07-24 2019-04-19 马维尔国际贸易有限公司 用于编译器优化的方法和系统
JP6245031B2 (ja) * 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
CN105634821B (zh) * 2016-01-13 2017-07-04 上海金智晟东电力科技有限公司 一种基于镜像报文的fa执行情况评价方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1918546A (zh) * 2004-02-12 2007-02-21 松下电器产业株式会社 程序转换装置及程序转换方法
CN101271397A (zh) * 2007-03-23 2008-09-24 北京大学 一种嵌套循环结构的识别方法
CN107506226A (zh) * 2017-07-07 2017-12-22 福建师范大学 一种用于hls指令优化的编码方法及终端

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MySQL存储过程遍历游标用loop嵌套循环的例子;花间与叶;《https://blog.csdn.net/jav901010/article/details/78487743?spm=1001.2014.3001.5502》;20171109;第1页 *

Also Published As

Publication number Publication date
CN109086049A (zh) 2018-12-25

Similar Documents

Publication Publication Date Title
US20210034990A1 (en) Rule Assignments and Templating
Maróti et al. Next generation (meta) modeling: web-and cloud-based collaborative tool infrastructure.
CN105074698B (zh) 并行地执行连续事件处理(cep)查询
JP6582819B2 (ja) データベース連携システムおよびデータベース連携用プログラム
US20170371922A1 (en) Database Management for Mobile Devices
EP4152224A1 (en) Machine learning application method, device, electronic apparatus, and storage medium
CN109522321A (zh) 一种数据库查询方法、装置、服务器及存储介质
CN110532280A (zh) Sql语句可视化方法以及装置
US20060020608A1 (en) Cube update tool
CN106528169A (zh) 一种基于AnGo动态演化模型的Web系统开发可复用方法
CN108536718A (zh) 一种基于输入输出语义化实现的管理信息化的方法和系统
CN114064926A (zh) 多模态电力知识图谱构建方法、装置、设备及存储介质
CN109086049B (zh) 遍历用户在线状态数据的方法
US10067980B2 (en) Database calculation engine integrating hierarchy views
WO2006007272A2 (en) Functional operations for accessing and/or building interlocking trees datastores to enable their use with applications software
Videla et al. Lenses for composable servers
Kotstein et al. Reinforcement learning for IoT interoperability
CN115774573B (zh) 应用集成方法、装置、电子设备和存储介质
CN116432351A (zh) 一种装配体中零部件关联更新方法及系统
US9116960B2 (en) Calculation engine with optimized multi-part querying
CN113676437B (zh) 参数获取方法、参数设置方法以及装置
CN115525321A (zh) 分布式任务生成方法、装置、设备及存储介质
US10169410B2 (en) Merge of stacked calculation views with higher level programming language logic
CN114780800A (zh) 一种多链路路由管理方法和装置
CN109876437A (zh) 一种游戏角色交互流程创建方法及其装置、存储介质

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