接着上文介绍轨迹管理平台中使用Redis存储实时定位信息。
历史位置信息可以存储在数据库中,由于设备上传实时定位信息时频率高并发量大,这里使用redis来存储各个设备上传的最新定位信息。真实情况下,设备也可以先将定位数据上传到消息队列(rabbitmq,kafka等),使用消费者worker异步将数据同步到数据库中。
同时,在线状态是通过查询设备终端最新10分钟内(可以自定义时间间隔)是否有定位轨迹点上传,使用redis的expire属性实现起来很容易。
使用Redis来存储实时定位信息的方法灵活多样。本例子中使用了第二种方法。
- 用hash类型,服务ID(设备组ID)当做key,组内的设备的ID当做field,最近定位信息当做value.每次收到上传数据时只需要hset key(服务ID) field(设备ID) value(定位信息),value里存储x,y坐标和定位时间time。使用hash类型存储某一服务内的多个设备的最近定位信息时,计算在线状态需要在程序内将每个field对应value中的定位时间time和当前时间做比较,判断是否小于在线状态规定的10分钟(可以自定义时间间隔),否则为离线。
- 可以直接使用string类型,"recentCoordinate_locator"开头的string,使用设备ID当做key,最近定位信息作为value.value里存储x,y坐标和定位时间time。同时使用 "keepOnline_locator"开头的string类型,收到上报数据时同时set key value EX,使用Ex来作为过期时间,Ex设置为规定的10分钟(600秒)(可以自定义时间间隔)。当从redis查找最新定位信息时,如果不存在设备ID作为key的数据,则判断为离线,否则为在线。