CN109461312B - 基于redis的过车数据去重方法 - Google Patents
基于redis的过车数据去重方法 Download PDFInfo
- Publication number
- CN109461312B CN109461312B CN201811610411.7A CN201811610411A CN109461312B CN 109461312 B CN109461312 B CN 109461312B CN 201811610411 A CN201811610411 A CN 201811610411A CN 109461312 B CN109461312 B CN 109461312B
- Authority
- CN
- China
- Prior art keywords
- data
- vehicle
- current
- redis
- main
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G08—SIGNALLING
- G08G—TRAFFIC CONTROL SYSTEMS
- G08G1/00—Traffic control systems for road vehicles
- G08G1/01—Detecting movement of traffic to be counted or controlled
- G08G1/0104—Measuring and analyzing of parameters relative to traffic conditions
- G08G1/0125—Traffic data processing
Landscapes
- Chemical & Material Sciences (AREA)
- Analytical Chemistry (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Traffic Control Systems (AREA)
Abstract
本申请公开了一种基于redis的过车数据去重方法,方法包括解析过车图片结果的json字符串,得到过车数据列表,所述过车数据列表中包括主体车数据、非主体车数据、无车牌机动车数据和非机动车数据的至少一种混合数据;设置逻辑变量,逻辑变量为给当前过车数据是过车数据列表最后一条数据时判断使用;对过车数据进行处理。本发明将过车数据存放到redis中进行缓存,没有数据处理的瓶颈。本发明将主体车数据和非主体车数据对应的键以不同的标识在redis中进行存储,防止过期数据丢失。本发明通过逻辑判断保证主体车数据不会被过滤掉。本发明中每张图片都确保会保留至少一条最优数据。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于redis的过车数据去重方法。
背景技术
现有的公共交通道路中,一条路或者一个路口有多个卡口和电警,每个设备拍摄的图片经解析后的车辆数据中主体车最多有一个。现实中,一辆车同一时间间隔如2分钟内会被设备拍摄多张照片,甚至同一秒钟会被拍摄多次,而每张照片经解析之后又有很多辆过车数据,这样就造成了重复数据过多。因此,过车数据去重就显得尤为重要,但如何保留所有有效数据并且去除重复数据,其中包括但不限于优先保存主体车(每张图片的主要车辆信息)以及保证每张图片都至少有一张最优数据已成为本技术最大难点,此外,还需要考虑性能问题,处理太慢会严重影响后续业务。
现有技术以及常规思路是将这些过车数据存到java的Map中或者保存到数据库中,而且根据的是消费时间而不是拍摄时间去重,并且不考虑数据是不是主体车数据,只考虑车牌号、路口以及缓存时间,这将带来的如下问题:
1、如果一张图片有主体车和非主体车,如果非主体车的数据比主体车的数据先经过去重程序,则可能将非主体车数据保存下来,而主体车数据被删掉,此种情况很显然应该优先保存主体车;
2、单纯依靠车牌和路口以及保存的时间来去重,可能会丢失很多原本应该保存下来的数据,比如第一张图片有车牌A,保存下来了,第二张图片有车牌A以及一些无牌的数据,第二张图片一条数据也不保存,此种情况很显然应该每张图片至少保留一条最优过车数据;
3、单纯依靠车牌和路口以及保存的时间来去重,可能会造成去除原本应该保存的过车数据,比如2分钟之内来了两条过车数据,他们车牌和路口一样,但是拍摄时间相差大于2分钟,但是因为缓存的时间在2分钟之内,所以被删掉,此种情况很显然两条都应该都保存。
发明内容
本发明公开了一种基于redis的过车数据去重方法,方法包括步骤:
解析过车图片结果的json字符串,得到过车数据列表,所述过车数据列表中包括主体车数据、非主体车数据、无车牌机动车数据和非机动车数据的至少一种混合数据;
设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
对所述过车数据进行处理,处理流程具体为:
遍历所述过车数据列表;
当前过车数据为非机动车数据时,执行非机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为无车牌的机动车数据时,执行无车牌的机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为主体车数据时,执行主体机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存存在时,执行非主体车数据且主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存不存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为所述过车数据列表的最后一条时,执行当前数据是过车数据列表最后一条的处理流程。
优选地,所述主体车数据和所述非主体车数据保存在redis中缓存,其中,所述主体车数据设置一个键值对,键由主体车标识、过车数据的车牌号和过车数据的路口组成,值为对应的过车数据json字符串;所述非主体车数据包括非主体车原数据和非主体车副本数据,设置两个键值对,分别是:非主体车原数据对应的键由非主体车标识、过车数据的车牌号和过车数据的路口组成、值为空;非主体车副本数据对应的键由非主体车副本标识、非主体车标识、过车数据的车牌号和过车数据的路口组成、值为对应的过车数据json字符串。
优选地,所述非机动车数据处理流程,进一步为,将所述非机动车数据发送到消息队列kafka。
优选地,所述执行无车牌的机动车数据处理流程,进一步为,
当前过车数据是有车型的无车牌机动车数据时,则将所述当前过车数据发送到消息队列kafka,并赋值所述布尔型变量B为true;
当前过车数据是无车型的无车牌机动车数据时,则将所述当前过车数据赋值为所述过车数据列表最后一条无车牌无车型的机动车的json字符串L。
优选地,所述执行主体机动车数据处理流程,进一步为,
将当前主体车数据发送到消息队列kafka;
将所述当前主体车数据的键值对保存在redis中,过期时间设为120秒;
赋值布尔型变量A为true;
判断所述redis中是否有非主体车原数据对应的键,当所述redis中没有所述非主体车原数据对应的键时,则不做处理;当所述redis中存在所述非主体车原数据对应的键时,判断非主体车副本数据对应的的键是否为null,当所述非主体车副本数据对应的键为null时,则不做处理;当所述非主体车副本数据对应的键不为null时,则判断所述非主体车数据和所述主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,将所述非主体车数据发送到所述消息队列kafka,同时删除所述redis缓存中的所述非主体车数据对应的两个键值对;当所述拍摄时间之差没有超过2分钟时,删除所述redis缓存中的所述非主体车数据对应的两个键值对。
优选地,所述执行非主体车数据且主体车数据缓存存在的处理流程,进一步为,判断redis缓存中的主体车数据和当前非主体车数据的拍摄时间之差,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,并赋值布尔型变量A为true;当所述拍摄时间之差未超过2分钟时,则将C赋值为所述当前非主体车数据。
优选地,所述执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程,进一步为,判断redis已缓存的非主体车副本数据对应的键是否为null,当所述已缓存的非主体车副本数据对应的键为null时,则将当前非主体车原数据对应的键值对保存到所述redis中,过期时间设为120秒,并同时在所述redis中保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据;
当所述已缓存的非主体车副本数据对应的键不为null时,则判断所述当前非主体车数据和所述redis中已缓存的非主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,同时在所述redis中保存所述当前非主体车原数据对应的键值对,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对;当所述拍摄时间之差未超过2分钟时,将C赋值为所述当前非主体车数据。
优选地,所述执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在的处理流程,进一步为,将当前非主体车原数据对应的键值对保存到redis中,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据。
优选地,所述执行当前数据是过车数据列表最后一条的处理流程,进一步为,判断布尔型变量A的取值,当所述布尔型变量A为true时,不进行操作;
当所述布尔型变量A为false时,则判断C值是否为null,当所述C值为null时,则继续判断布尔型变量B值是否为true,当所述布尔型变量B值为true时,不进行操作;当所述布尔型变量B值为false时,将过车数据列表中任意一条过车数据赋值为L,并将所述L发送到消息队列kafka;
当所述C值不为null时,将所述C值发送到所述消息队列kafka。
与现有技术相比,本发明提供的基于redis的过车数据去重方法,达到如下有益效果:
第一,本发明将过车数据存放到redis中进行缓存,使所有过车数据以及读写操作都在内存中执行,每秒钟可执行上万次操作,没有数据处理的瓶颈。
第二,本发明将主体车数据和非主体车数据对应的键以不同的标识在redis中进行存储,主体车数据对应的键为“主体车+车牌+路口”,值为过车数据json字符串,非主体车数据有两个键值对,一个为“非主体车+车牌+路口”,值为空;另一个为“副本+非主体车+车牌+路口”,值为过车数据json字符串;当非主体车数据缓存120秒后,如果没有保存或删除,则过期后需要保存下来,由于redis过期键通知的时候,该键值对已经被删掉,所以需要创建一个副本来存储该数据,这样键过期的时候,就可以获取该键对应的副本数据。
第三,本发明通过逻辑判断,如果当前数据是主体车数据,则将当前数据立即保存并缓存到redis中,存放120秒后过期,后续再来一条带车牌的非主体车数据,则根据逻辑判断非主体车数据是否保存;如果当前数据是非主体车数据,将当前数据缓存到redis中,存放120秒后过期,后续再来一条主体车数据,则主体车数据立即保存并缓存到redis中,存放120秒后过期,根据逻辑判断非主体数据是否保存;这样无论主体车数据还是非主体车数据谁先经过去重程序,都可以根据逻辑判断保存下主体车数据。
第四,本发明中如果一张图片有多条过车数据记录,当过车数据记录中有主体车数据或者带车牌的非主体车数据则当即保存下来,不做额外操作;如果不能确定立即保存的过车数据,则优先保存一条带车牌的非主体车数据,如果没有则保存无车牌有车型的过车数据;如果没有则保存最后一条机动车数据,总之,本发明中每张图片都确保会保留至少一条最优数据。
第五,本发明通过拍摄时间进行过车数据去重,避免因单纯依靠车牌、路口以及保存时间去重而删除掉有用数据。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本发明实施例1中基于redis的过车数据去重方法的流程图;
图2为本发明实施例1中基于redis的过车数据去重方法的数据处理流程图;
图3为本发明实施例1中基于redis的过车数据去重方法的最后一条数据逻辑判断流程图;
图4为本发明实施例3中基于redis的过车数据去重方法的无车牌机动车数据处理流程图;
图5为本发明实施例4中基于redis的过车数据去重方法的主体机动车数据处理流程图;
图6为本发明实施例5中基于redis的过车数据去重方法的非主体车数据且主体车数据缓存存在的处理流程图;
图7为本发明实施例6中基于redis的过车数据去重方法的非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。应注意到,所描述的实施例实际上仅仅是本发明一部分实施例,而不是全部的实施例,且实际上仅是说明性的,决不作为对本发明及其应用或使用的任何限制。本申请的保护范围当视所附权利要求所界定者为准。
实施例1:
参见图1所示为本申请所述基于redis的过车数据去重方法的具体实施例,该方法包括步骤:
步骤101、解析过车图片结果的json字符串,得到过车数据列表,所述过车数据列表中包括主体车数据、非主体车数据、无车牌机动车数据和非机动车数据的至少一种混合数据;当所述主体车数据和所述非主体车数据保存在redis中缓存时,其中,所述主体车数据设置一个键值对,键由主体车标识、过车数据的车牌号和过车数据的路口组成,值为对应的过车数据json字符串;所述非主体车数据包括非主体车原数据和非主体车副本数据,设置两个键值对,分别是:非主体车原数据对应的键由非主体车标识、过车数据的车牌号和过车数据的路口组成、值为空;非主体车副本数据对应的键由非主体车副本标识、非主体车标识、过车数据的车牌号和过车数据的路口组成、值为对应的过车数据json字符串;
步骤102、设置逻辑变量,该逻辑变量用于判断当前过车数据是否为所述过车数据列表中最后一条数据,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤103、对所述过车数据进行处理,参见图2所示处理流程具体为:
遍历所述过车数据列表;
当前过车数据为非机动车数据时,执行非机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中所述非机动车数据处理流程具体为,将所述非机动车数据发送到消息队列kafka;
当前过车数据为无车牌的机动车数据时,执行无车牌的机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中具体流程为,当前过车数据是有车型的无车牌机动车数据,则将所述当前过车数据发送到消息队列kafka,并赋值所述布尔型变量B为true;当前过车数据是无车型的无车牌机动车数据,则将所述当前过车数据赋值为所述过车数据列表最后一条无车牌无车型的机动车的json字符串L;
当前过车数据为主体车数据时,执行主体机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中流程具体为,将当前主体车数据发送到消息队列kafka;将所述当前主体车数据的键值对保存在redis中,过期时间设为120秒;赋值布尔型变量A为true;判断所述redis中是否有非主体车原数据对应的键,当所述redis中没有所述非主体车原数据对应的键时,则不做处理;当所述redis中存在所述非主体车原数据对应的键时,判断所述非主体车副本数据对应的键是否为null,当所述非主体车副本数据对应的键为null时,则不做处理;当所述非主体车副本数据对应的键不为null时,则判断所述非主体车数据和所述主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,将所述非主体车数据发送到所述消息队列kafka,同时删除所述redis缓存中的所述非主体车数据对应的两个键值对;当所述拍摄时间之差没有超过2分钟时,删除所述redis缓存中的所述非主体车数据对应的两个键值对;非主体车数据缓存的键如果存活时间到120秒还没有被程序删掉的话,说明期间一直没有主体车,或者在参与去重的过程中已经去掉了重复的非主体车,需要在过期的时候保存下来,当非主体车数据对应键过期时程序会收到过期通知,但是由于非主体车数据对应键已经被删除,不能获取到非主体车数据对应键的值,所以需要读取非主体车数据对应的副本,将该副本存储的值保存下来,发送到kafka;由于redis的cluster的过期通知并不会跨节点,所以只能用单master的模式,如主从或者哨兵模式;
当前过车数据为非主体车数据时,且redis中主体车数据缓存存在时,执行非主体车数据且主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中流程具体为,判断redis缓存中的主体车数据和当前非主体车数据的拍摄时间之差,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,并赋值布尔型变量A为true;当所述拍摄时间之差未超过2分钟时,则将C赋值为所述当前非主体车数据;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中具体流程为,判断redis已缓存的非主体车副本数据对应的键是否为null,当所述已缓存的非主体车副本数据对应的键为null时,则将当前非主体车原数据对应的键值对保存到所述redis中,过期时间设为120秒,并同时在所述redis中保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据;当所述已缓存的非主体车副本数据对应的键不为null时,则判断所述当前非主体车数据和所述redis中已缓存的非主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,同时在所述redis中保存所述当前非主体车原数据对应的键值对,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对;当所述拍摄时间之差未超过2分钟时,将C赋值为所述当前非主体车数据;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存不存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;其中具体流程为,将当前非主体车原数据对应的键值对保存到redis中,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据;
参见图3所示,当前过车数据为所述过车数据列表的最后一条时,判断布尔型变量A的取值,当所述布尔型变量A为true时,不进行操作;当所述布尔型变量A为false时,则判断C值是否为null,当所述C值为null时,则继续判断布尔型变量B值是否为true,当所述布尔型变量B值为true时,不进行操作;当所述布尔型变量B值为false时,将过车数据列表中任意一条过车数据赋值为L,并将所述L发送到消息队列kafka;当所述C值不为null时,将所述C值发送到所述消息队列kafka。
实施例2:
本申请提供了基于redis的过车数据去重方法的一个实用型实施例,该方法包括步骤:
步骤201、解析过车图片结果的json字符串,得到过车数据列表;
步骤202、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤203、遍历所述过车数据列表;
步骤204、当前过车数据为非机动车数据,且是所述过车数据列表中的最后一条数据,则将所述非机动车数据发送到消息队列kafka。
实施例3:
本申请提供了基于redis的过车数据去重方法的另一个实用型实施例,该方法包括步骤:
步骤301、解析过车图片结果的json字符串,得到过车数据列表;
步骤302、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤303、遍历所述过车数据列表;
步骤304、参见图4所示,当前过车数据是有车型的无车牌机动车数据,则将所述当前过车数据发送到消息队列kafka,并赋值所述布尔型变量B为true;
当前过车数据是无车型的无车牌机动车数据,则将所述当前过车数据赋值为所述过车数据列表最后一条无车牌无车型的机动车的json字符串L。
实施例4:
本申请提供了基于redis的过车数据去重方法的另一个实用型实施例,该方法包括步骤:
步骤401、解析过车图片结果的json字符串,得到过车数据列表;
步骤402、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤403、遍历所述过车数据列表;
步骤404、参见图5所示,当前过车数据为主体车数据,将当前主体车数据发送到消息队列kafka;
步骤405、将所述当前主体车数据对应的键值对保存在redis中,过期时间设为120秒;
步骤406、赋值布尔型变量A为true;
步骤407、判断所述redis中是否有非主体车原数据对应的键,当所述redis中没有所述非主体车原数据对应的键时,则不做处理;当所述redis中存在所述非主体车原数据对应的键时,判断所述非主体车副本数据对应的键是否为null,当所述非主体车副本数据对应的键为null时,则不做处理;当所述非主体车副本数据对应的键不为null,则判断所述非主体车数据和所述主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,将所述非主体车数据发送到所述消息队列kafka,同时删除所述redis缓存中的所述非主体车数据对应的两个键值对;当所述拍摄时间之差没有超过2分钟,删除所述redis缓存中的所述非主体车数据对应的两个键值对。
实施例5:
本申请提供了基于redis的过车数据去重方法的另一个实用型实施例,该方法包括步骤:
步骤501、解析过车图片结果的json字符串,得到过车数据列表;
步骤502、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤503、遍历所述过车数据列表;
步骤504、参见图6所示,当前数据为非主体车数据,且redis中主体车数据缓存存在,判断redis缓存中的主体车数据和当前非主体车数据的拍摄时间之差,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,并赋值布尔型变量A为true;当所述拍摄时间之差未超过2分钟时,则将C赋值为所述当前非主体车数据。
实施例6:
本申请提供了基于redis的过车数据去重方法的另一个实用型实施例,该方法包括步骤:
步骤601、解析过车图片结果的json字符串,得到过车数据列表;
步骤602、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤603、遍历所述过车数据列表;
步骤604、参见图7所示,当前过车数据为非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在,判断redis已缓存的非主体车副本数据对应的键是否为null,当所述已缓存的非主体车副本数据对应的键为null时,则将当前非主体车原数据对应的键值对保存到所述redis中,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据;当所述已缓存的非主体车副本数据对应的键不为null时,则判断所述当前非主体车数据和所述redis中已缓存的非主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,同时在所述redis中保存所述当前非主体车原数据对应的键值对,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对;当所述拍摄时间之差未超过2分钟时,将C赋值为所述当前非主体车数据。
实施例7:
本申请提供了基于redis的过车数据去重方法的另一个实用型实施例,该方法包括步骤:
步骤701、解析过车图片结果的json字符串,得到过车数据列表;
步骤702、设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
步骤703、遍历所述过车数据列表;
步骤704、当前过车数据为非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在,将当前非主体车原数据对应的键值对保存到redis中,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据。
通过以上各实施例可知,本申请存在的有益效果是:
第一,本发明将过车数据存放到redis中进行缓存,使所有过车数据以及读写操作都在内存中执行,每秒钟可执行上万次操作,没有数据处理的瓶颈。
第二,本发明将主体车数据和非主体车数据对应的键以不同的标识在redis中进行存储,主体车数据对应的键为“主体车+车牌+路口”,值为过车数据json字符串,非主体车数据有两个键值对,一个为“非主体车+车牌+路口”,值为空;另一个为“副本+非主体车+车牌+路口”,值为过车数据json字符串;当非主体车数据缓存120秒后,如果没有保存或删除,则过期后需要保存下来,由于redis过期键通知的时候,该键值对已经被删掉,所以需要创建一个副本来存储该数据,这样键过期的时候,就可以获取该键对应的副本数据。
第三,本发明通过逻辑判断,如果当前数据是主体车数据,则将当前数据立即保存并缓存到redis中,存放120秒后过期,后续再来一条带车牌的非主体车数据,则根据逻辑判断非主体车数据是否保存;如果当前数据是非主体车数据,将当前数据缓存到redis中,存放120秒后过期,后续再来一条主体车数据,则主体车数据立即保存并缓存到redis中,存放120秒后过期,根据逻辑判断非主体数据是否保存;这样无论主体车数据还是非主体车数据谁先经过去重程序,都可以根据逻辑判断保存下主体车数据。
第四,本发明中如果一张图片有多条过车数据记录,当过车数据记录中有主体车数据或者带车牌的非主体车数据则当即保存下来,不做额外操作;如果不能确定立即保存的过车数据,则优先保存一条带车牌的非主体车数据,如果没有则保存无车牌有车型的过车数据;如果没有则保存最后一条机动车数据,总之,本发明中每张图片都确保会保留至少一条最优数据。
第五,本发明通过拍摄时间进行过车数据去重,避免因单纯依靠车牌、路口以及保存时间去重而删除掉有用数据。
上面通过附图和实施例,对本发明的技术方案做虽然已经通过例子对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上例子仅是为了进行说明,而不是为了限制本发明的范围。尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。本发明的范围由所附权利要求来限定。
Claims (9)
1.一种基于redis的过车数据去重方法,其特征在于,包括步骤:
解析过车图片结果的json字符串,得到过车数据列表,所述过车数据列表中包括主体车数据、非主体车数据、无车牌机动车数据和非机动车数据的至少一种混合数据;
设置逻辑变量,所述逻辑变量为给当前过车数据是所述过车数据列表最后一条数据时判断使用,其中,所述变量包括:所述过车数据是否有当即保存的主体车或带车牌的非主体车的布尔型变量A,设置为false表示没有;带车牌的非主体车对象C;是否有无车牌有车型的数据保存的布尔型变量B,设置为false表示没有;所述过车数据最后一条无车牌无车型的机动车的json字符串L;其中,A为sendFlag,B为noPlateButInfoFlag,C为carnoVsd,L为lastNoPlateNoCarInfoVehicleModelJson;
所述主体车是指每张图片的主要车辆信息;
对所述过车数据进行处理,处理流程具体为:
遍历所述过车数据列表;
当前过车数据为非机动车数据时,执行非机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为无车牌的机动车数据时,执行无车牌的机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为主体车数据时,执行主体机动车数据处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存存在时,执行非主体车数据且主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为非主体车数据时,且redis中主体车数据缓存不存在,非主体车数据缓存不存在时,执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在的处理流程,并判断所述当前过车数据是否为所述过车数据列表的最后一条;
当前过车数据为所述过车数据列表的最后一条时,执行当前数据是过车数据列表最后一条的处理流程。
2.根据权利要求1所述的基于redis的过车数据去重方法,其特征在于,所述主体车数据和所述非主体车数据保存在redis中缓存,其中,所述主体车数据设置一个键值对,键由主体车标识、过车数据的车牌号和过车数据的路口组成,值为对应的过车数据json字符串;所述非主体车数据包括非主体车原数据和非主体车副本数据,设置两个键值对,分别是:非主体车原数据对应的键由非主体车标识、过车数据的车牌号和过车数据的路口组成、值为空;非主体车副本数据对应的键由非主体车副本标识、非主体车标识、过车数据的车牌号和过车数据的路口组成、值为对应的过车数据json字符串。
3.根据权利要求1所述的基于redis的过车数据去重方法,其特征在于,所述非机动车数据处理流程,进一步为,将所述非机动车数据发送到消息队列kafka。
4.根据权利要求1所述的基于redis的过车数据去重方法,其特征在于,所述执行无车牌的机动车数据处理流程,进一步为,
当前过车数据是有车型的无车牌机动车数据时,则将所述当前过车数据发送到消息队列kafka,并赋值所述布尔型变量B为true;
当前过车数据是无车型的无车牌机动车数据时,则将所述当前过车数据赋值为所述过车数据列表最后一条无车牌无车型的机动车的json字符串L。
5.根据权利要求2所述的基于redis的过车数据去重方法,其特征在于,所述执行主体机动车数据处理流程,进一步为,
将当前主体车数据发送到消息队列kafka;
将所述当前主体车数据的键值对保存在redis中,过期时间设为120秒;
赋值布尔型变量A为true;
判断所述redis中是否有非主体车原数据对应的键,当所述redis中没有所述非主体车原数据对应的键时,则不做处理;当所述redis中存在所述非主体车原数据对应的键时,判断非主体车副本数据对应的键是否为null,当所述非主体车副本数据对应的键为null时,则不做处理;当所述非主体车副本数据对应的键不为null时,则判断所述非主体车数据和所述主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,将所述非主体车数据发送到所述消息队列kafka,同时删除所述redis缓存中的所述非主体车数据对应的两个键值对;当所述拍摄时间之差没有超过2分钟时,删除所述redis缓存中的所述非主体车数据对应的两个键值对。
6.根据权利要求1所述的基于redis的过车数据去重方法,其特征在于,所述执行非主体车数据且主体车数据缓存存在的处理流程,进一步为,判断redis缓存中的主体车数据和当前非主体车数据的拍摄时间之差,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,并赋值布尔型变量A为true;当所述拍摄时间之差未超过2分钟时,则将C赋值为所述当前非主体车数据。
7.根据权利要求2所述的基于redis的过车数据去重方法,其特征在于,所述执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存存在的处理流程,进一步为,判断redis已缓存的非主体车副本数据对应的键是否为null,当所述已缓存的非主体车副本数据对应的键为null时,则将当前非主体车原数据对应的键值对保存到所述redis中,过期时间设为120秒,并同时在所述redis中保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据;
当所述已缓存的非主体车副本数据对应的键不为null时,则判断所述当前非主体车数据和所述redis中已缓存的非主体车数据的拍摄时间之差是否超过2分钟,当所述拍摄时间之差超过2分钟时,则将所述当前非主体车数据发送到消息队列kafka,同时在所述redis中保存所述当前非主体车原数据对应的键值对,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对;当所述拍摄时间之差未超过2分钟时,将C赋值为所述当前非主体车数据。
8.根据权利要求2所述的基于redis的过车数据去重方法,其特征在于,所述执行非主体车数据且主体车数据缓存不存在、非主体车数据缓存不存在的处理流程,进一步为,将当前非主体车原数据对应的键值对保存到redis中,过期时间设为120秒,并同时保存所述当前非主体车副本数据对应的键值对,并赋值C为所述当前非主体车数据。
9.根据权利要求1所述的基于redis的过车数据去重方法,其特征在于,所述执行当前数据是过车数据列表最后一条的处理流程,进一步为,判断布尔型变量A的取值,当所述布尔型变量A为true时,不进行操作;
当所述布尔型变量A为false时,则判断C值是否为null,当所述C值为null时,则继续判断布尔型变量B值是否为true,当所述布尔型变量B值为true时,不进行操作;当所述布尔型变量B值为false时,将过车数据列表中任意一条过车数据赋值为L,并将所述L发送到消息队列kafka;
当所述C值不为null时,将所述C值发送到所述消息队列kafka。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811610411.7A CN109461312B (zh) | 2018-12-27 | 2018-12-27 | 基于redis的过车数据去重方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811610411.7A CN109461312B (zh) | 2018-12-27 | 2018-12-27 | 基于redis的过车数据去重方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109461312A CN109461312A (zh) | 2019-03-12 |
CN109461312B true CN109461312B (zh) | 2020-10-30 |
Family
ID=65615032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811610411.7A Active CN109461312B (zh) | 2018-12-27 | 2018-12-27 | 基于redis的过车数据去重方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109461312B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309707B (zh) * | 2020-01-23 | 2022-04-29 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
CN112306998B (zh) * | 2020-10-13 | 2023-11-24 | 武汉中科通达高新技术股份有限公司 | 交委数据去重方法、装置及服务器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967805A (zh) * | 2017-11-24 | 2018-04-27 | 泰华智慧产业集团股份有限公司 | 基于大数据分析快速离城车辆的方法及装置 |
CN108717790A (zh) * | 2018-07-06 | 2018-10-30 | 广州市交通运输研究所 | 一种基于卡口车牌识别数据的车辆出行分析方法 |
CN108898831A (zh) * | 2018-06-25 | 2018-11-27 | 广州市市政工程设计研究总院有限公司 | 基于道路高清卡口数据的路段状况评估方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8014936B2 (en) * | 2006-03-03 | 2011-09-06 | Inrix, Inc. | Filtering road traffic condition data obtained from mobile data sources |
US8417442B2 (en) * | 2006-09-19 | 2013-04-09 | Intuitive Control Systems, Llc | Collection, monitoring, analyzing and reporting of traffic data via vehicle sensor devices placed at multiple remote locations |
CN102810250B (zh) * | 2012-07-31 | 2014-07-02 | 长安大学 | 基于视频的多车型交通信息检测方法 |
CN103490937B (zh) * | 2013-10-12 | 2017-02-01 | 北京奇虎科技有限公司 | 监控数据过滤方法及装置 |
-
2018
- 2018-12-27 CN CN201811610411.7A patent/CN109461312B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967805A (zh) * | 2017-11-24 | 2018-04-27 | 泰华智慧产业集团股份有限公司 | 基于大数据分析快速离城车辆的方法及装置 |
CN108898831A (zh) * | 2018-06-25 | 2018-11-27 | 广州市市政工程设计研究总院有限公司 | 基于道路高清卡口数据的路段状况评估方法及系统 |
CN108717790A (zh) * | 2018-07-06 | 2018-10-30 | 广州市交通运输研究所 | 一种基于卡口车牌识别数据的车辆出行分析方法 |
Non-Patent Citations (1)
Title |
---|
基于Node_red与Redis的实时流数据处理模型的设计与应用;王江波;《中国优秀硕士学位论文全文数据库信息科技辑》;20180215(第2期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109461312A (zh) | 2019-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10289766B2 (en) | Method and apparatus for constructing test scenario of unmanned vehicles | |
CN109461312B (zh) | 基于redis的过车数据去重方法 | |
US20140307923A1 (en) | Determining images having unidentifiable license plates | |
CN108897628A (zh) | 一种分布式锁的实现方法、装置及电子设备 | |
US20150293816A1 (en) | Data processing method and apparatus | |
JP6970686B2 (ja) | データベース・テーブル、テキスト・ファイル、及びデータ・フィード中のテキストのソルティング | |
CN112712702B (zh) | 违法事件去重方法、装置、电子设备及机器可读存储介质 | |
CN112579905A (zh) | 消息推送对象确定方法、装置、设备及存储介质 | |
CN115981563A (zh) | 一种交通影像信息的存储方法及系统 | |
US20190228644A1 (en) | Server device and information collection system | |
CN109522305B (zh) | 一种大数据去重方法及装置 | |
CN106529281A (zh) | 一种可执行文件处理方法及装置 | |
CN111368651B (zh) | 一种车辆识别方法、装置及电子设备 | |
CN115115231A (zh) | 指标体系构建方法、装置、电子设备及存储介质 | |
US20160196331A1 (en) | Reconstitution order of entity evaluations | |
WO2017124991A1 (zh) | 一种媒体信息发布方法、系统及计算机存储介质 | |
CN114708425A (zh) | 车辆违停的识别方法、装置及计算机可读存储介质 | |
CN110543365B (zh) | 内存优化方法及装置、计算机可读介质、电子设备 | |
CN113094753A (zh) | 基于区块链的大数据平台hive数据修改方法以及系统 | |
CN112306998A (zh) | 交委数据去重方法、装置及服务器 | |
CN105677756A (zh) | 一种文件系统中有效利用缓存的方法和装置 | |
CN111371818A (zh) | 一种数据请求的验证方法、装置及设备 | |
CN115617809B (zh) | 数据库唯一性约束处理方法、装置、设备及介质 | |
CN113923602B (zh) | 信令漂移数据的过滤方法及装置 | |
CN110851445B (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 |