999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于Redis的車輛軌跡信息的獲取方式

2017-09-07 06:37:49徐芳芳張勁松
電子設(shè)計工程 2017年17期
關(guān)鍵詞:設(shè)置數(shù)據(jù)庫信息

徐芳芳,張勁松

(1.武漢郵電科學研究院 湖北 武漢 430070;2.武漢長江通信智聯(lián)技術(shù)有限公司 湖北 武漢430070)

一種基于Redis的車輛軌跡信息的獲取方式

徐芳芳1,張勁松2

(1.武漢郵電科學研究院 湖北 武漢 430070;2.武漢長江通信智聯(lián)技術(shù)有限公司 湖北 武漢430070)

目前大多數(shù)公司主要是通過車載終端與GPS通信,獲取GPS上面車輛軌跡信息,存入數(shù)據(jù)庫。但針對運輸企業(yè)來說,上述獲取車輛軌跡信息的做法,會造成很大的經(jīng)濟負擔。為此,文章提出了一種Java Timer和Guava cache結(jié)合的方式從Redis數(shù)據(jù)庫上獲取運輸企業(yè)車輛的軌跡信息,存儲到本地數(shù)據(jù)庫,便于運輸企業(yè)了解車輛信息,查詢車輛歷史軌跡。

Guava cache;Redis;Java定時器

隨著我國經(jīng)濟的快速發(fā)展,車輛逐年增加,同時所造成的交通事故也在逐年上升,車輛監(jiān)管越來越受人們的重視。目前,車輛管理中,獲取車輛歷史軌跡信息的方式有兩種:一種是通過車載終端與GPS通信[1],在GPS接收端獲取車輛軌跡信息,傳回控制中心后存儲到本地數(shù)據(jù)庫;另一種是通過與上述這種有條件的企業(yè)合作,動態(tài)獲取他們得到的車輛軌跡信息。

對于不是專門做GPS與車載終端通信的企業(yè)來說,一般會選取第二種方式。選用第二種方式時,有多種實現(xiàn)方法。如當需要車輛軌跡數(shù)據(jù)時,我們可以調(diào)用對方發(fā)送的接口直接獲取數(shù)據(jù);也可以主動去對方那里取數(shù)據(jù),存到本地的數(shù)據(jù)庫,當我們需要數(shù)據(jù)時,直接從本地數(shù)據(jù)庫取數(shù)據(jù)。選用從對方發(fā)送的接口直接獲取數(shù)據(jù)的方法,一般會受到異網(wǎng)段影響,造成較長時延,如果網(wǎng)絡信號不好,可能造成信息丟失。而選用主動去對方那里取數(shù)據(jù),存到本地的數(shù)據(jù)庫時,我們需要考慮如何從對方那里直接取數(shù)據(jù)??梢允褂弥虚g數(shù)據(jù)庫做橋梁。對方往里面存數(shù)據(jù),我們不斷取,然后存入本地數(shù)據(jù)庫。其中比較好的可以做中間數(shù)據(jù)庫的有coherence(可以實現(xiàn)java應用對象和數(shù)據(jù)的共享)和Redis,但使用coherence需要付費。

由上可知,采用第二種方式獲取車輛軌跡信息大多會受到異網(wǎng)段傳輸時間過長,信息丟失,成本過高等影響。為了解決這種問題,本文在第二種方式的基礎(chǔ)上提出一種基于Redis的車輛軌跡信息的獲取的方式。

1 技術(shù)簡介

Guava Cache[2-5]是一個全內(nèi)存的本地緩存。它提供了一種把數(shù)據(jù)(key-value對)緩存到本地Java虛擬機(JVM)內(nèi)存中的機制,適用于很少會改動的數(shù)據(jù)。Guava Cache為了限制內(nèi)存占用,設(shè)有自動回收元素。

Redis是一個支持網(wǎng)絡交互的、可基于內(nèi)存也可持久化的Key-Value數(shù)據(jù)庫。和Memcached類似,它擁有豐富的數(shù)據(jù)類型,支持存儲的value類型相對更多,包括 string、list、set、zset(sorted set--有序集合)和hash(哈希類型)。

文中采取Redis與Guava Cache結(jié)合的方式,獲取車輛軌跡信息[6-7],在提高應用性能的同時,大大提高響應速度。

2 功能實現(xiàn)

如圖1,先從Redis上獲取數(shù)據(jù),在SSM(Spring+springMVC+mybatis)框架[15]上得到運輸車輛軌跡信息,經(jīng)過處理后,批量存入數(shù)據(jù)庫。當需要查看mysql中存入的車輛歷史軌跡信息對車輛數(shù)據(jù)進行分析時,由前臺頁面發(fā)出請求[13-14]后,從mysql中取出數(shù)據(jù)處理,展示在引入的地圖[8-12]上。

圖1 業(yè)務流程圖

2.1 數(shù)據(jù)庫的設(shè)計

1)mysql數(shù)據(jù)表的設(shè)計

根據(jù)需求設(shè)計Mysql數(shù)據(jù)表1,定義表名為gpsinfo,對應實體類型為GPSInfo。

表1 車輛信息表(gpsinfo)

其中,lat表示用GPS定位的車輛緯度,elat表示為項目所需經(jīng)過糾偏后的緯度。gTime用GPS定位后采集到此車輛信息的時間。

2)Redis中結(jié)構(gòu)的設(shè)計

由圖1可知,從Redis數(shù)據(jù)庫上取數(shù)據(jù)后,要存入Mysql對應字段的數(shù)據(jù)表,Redis中hash是最接近關(guān)系數(shù)據(jù)庫結(jié)構(gòu)的數(shù)據(jù)類型,可以將數(shù)據(jù)庫一條記錄或程序中一個對象轉(zhuǎn)換成hashmap存放在redis中。如表2 Redis數(shù)據(jù)庫上數(shù)據(jù)結(jié)構(gòu)的設(shè)計,表字段基本與mysql數(shù)據(jù)表對應。

表2 Redis中hash數(shù)據(jù)結(jié)構(gòu)設(shè)計key-value(hash)

2.2 車輛信息的獲取和處理

圖2 車輛信息存儲流程圖

如圖2,為了使mysql數(shù)據(jù)庫的數(shù)據(jù)與Redis數(shù)據(jù)庫中的數(shù)據(jù)盡量達到同步,需要每個固定的一段時間去Redis數(shù)據(jù)庫中的獲取數(shù)據(jù)存入Mysql數(shù)據(jù)庫,盡量達到二者數(shù)據(jù)的同步。這樣的需求可以做一個線程,線程中做一個死循環(huán),循環(huán)中執(zhí)行的這個任務,每執(zhí)行完一次讓線程睡眠一段時間,這樣就可以達到這個需求。最簡單最便捷的方式是使用Java為我們提供的計時器的工具類,即Timer和TimerTask。Timer是一個普通的類,其中有幾個重要的方法;而TimerTask則是一個抽象類,其中有一個抽象方法run(),通過run方法開啟線程。我們使用Timer創(chuàng)建一個對象,然后使用這對象的schedule方法來完成這種定時操作。這種通過開啟一個時間間隔線程,實時獲取redis上車輛軌跡信息,基本上可以實現(xiàn)本地數(shù)據(jù)庫數(shù)據(jù)與redis上數(shù)據(jù)的同步。具體步驟如下:

1)由圖2可知,首先當程序開始的時候調(diào)用建立java Timer定時器,使用schedul()方法設(shè)定程序開始30s后調(diào)用線程中run()方法執(zhí)行從redis上取數(shù)據(jù)并處理后存入數(shù)據(jù)庫,然后每30秒執(zhí)行一次,定時刷新,從而使mysqls的數(shù)據(jù),與Redis的數(shù)據(jù)盡量達到同步。

2)啟動定時器Timer后,開始在線程中處理數(shù)據(jù)。 使用 jedis.hgetAll ("gpsInfos")(jedis為 redis的java客戶端),每次取出所有運輸企業(yè)的車輛信息放在Map中,同時設(shè)置一個list集合 (數(shù)據(jù)類型為GPSInfo)。采用循環(huán)將Map中車輛信息分條取出,將每條數(shù)據(jù)放入與數(shù)據(jù)表對應的實體類gpsInfo(類型為 GPSInfo)中,設(shè)置獲取時間 gpsInfo.setoTime(new Date()),設(shè)置車輛狀態(tài) gpsInfo.setStatus("在線"),同時采用糾偏工具將獲取的GPS經(jīng)緯度轉(zhuǎn)換成對應地圖的經(jīng)緯度,根據(jù)經(jīng)緯度和地址查詢工具設(shè)置車輛的具體位置,將設(shè)置好的實體類gpsInfo放在對應list集合中,同時記錄日志,方便后期查詢。當循環(huán)結(jié)束后,判斷l(xiāng)ist集合是否存在值,若有值將list中數(shù)據(jù)批量插入數(shù)據(jù)庫。

3)上面2)是一種理想獲取車輛歷史軌跡的狀態(tài),實際上這里有兩個問題,其一redis是一個內(nèi)存數(shù)據(jù)庫,對于程序來說,內(nèi)存是有限且非常重要的,redis本身并沒有自動回收機制,不斷的向redis存數(shù)據(jù)會造成數(shù)據(jù)庫的崩潰。其二從redis獲取數(shù)據(jù)時,并不知道車輛是在線狀態(tài)還是離線狀態(tài),僅當我們獲取到車輛軌跡信息時,我們能判斷此GPS采集時間車輛的狀態(tài)為在線,如果沒有獲取到相關(guān)車輛軌跡信息,我們怎樣設(shè)置車輛為離線呢?為了解決以上兩種問題,我們引入本地緩存Guava cache。

定義一個全局變量private LoadingCache<String,GPSInfo> gpsInfosGuaveCache。程序啟動時自動加載的一個 LoadingCache類型的函數(shù)gpsInfosGuaveCache()并賦值給全局變量gpsInfosGuaveCache,在2)循環(huán)中設(shè)置好實體類gpsInfo之后,按照Key-value數(shù)據(jù)類型將對應車輛信 息按車牌號 存入 Guavacache中 :gpsInfosGuaveCache.put (carNum,gpsInfo)。 由 于Guava cache是本地緩存,為了避免它占用過多的內(nèi)存,本文使用它自帶的回收元素回收內(nèi)存。在函數(shù)gpsInfosGuaveCache()中,先設(shè)置基于大小移除的方法 :CacheBuilder.newBuilder().maximumSize(50000)當存入全局變量gpsInfosGuaveCache的key值數(shù)量接近于50000時,Guave Cache就會把不常用的鍵值對從cache中移除,同時配合基于時間的移除:expireAfterWrite (30,TimeUnit.SECONDS),當超過30s時,對應車輛key值沒有數(shù)據(jù)更新,移除此key值。在移除數(shù)據(jù)時設(shè)置一個Guava cache自帶的監(jiān)聽器,當監(jiān)聽到key值移除時,刪除redis數(shù)據(jù)庫上對應的此鍵值:jedis.del("gpsInfos",gpsInfo.getKey()),并在監(jiān)聽函數(shù)中設(shè)置車輛離線狀態(tài),將設(shè)好的數(shù)據(jù)更新到mysql中。這樣使用Guava cache即對redis進行了優(yōu)化,又設(shè)置了接收車輛的相關(guān)數(shù)據(jù)。

3 數(shù)據(jù)展示

如圖3所示:(下面車牌號為修改過的測試用的車牌號)。

為了驗證車輛歷史軌跡是否正確,本文采用百

圖3 車輛軌跡回放

度地圖展示數(shù)據(jù)。為了精確的找到車輛在一段時間 的歷史軌跡。需要利用ajax技術(shù)的將車牌號、車牌顏色、車輛運行的時間段發(fā)送到后臺,進行請求,請求成功后,判斷是否有數(shù)據(jù)返回,若沒有數(shù)據(jù)給出"沒有查詢到相關(guān)車輛信息!"提示信息,若有數(shù)據(jù),將查詢到的車輛軌跡信息,通過循環(huán)的以new BMap.Point(lon,lat)方式放在 pointArray[i]數(shù)組中,使用Polyline函數(shù),將數(shù)組中的車輛經(jīng)緯度,按照先后順序連接起來。最后設(shè)置一個功能函數(shù),便于查看車輛在地圖上的運行軌跡。

4 結(jié)束語

文章介紹了一種基于Redis的車輛軌跡信息的獲取技術(shù),在優(yōu)化性能的同時提高了響應速度,同時引入百度地圖API觀察獲取到的數(shù)據(jù),直觀、簡單、方便運輸企業(yè)查看運輸車輛歷史軌跡,了解分析車輛在運行中的信息。

[1]毛志宇,張正,曹玉志.基于RFID與GPS的巖土運輸車輛管理系統(tǒng)的研究與開發(fā) [J].信息化建設(shè),2016(3):353.

[2]王心妍.Memcached和Redis在高速緩存方面的應用[J].無線互聯(lián)科技,2012(9):8-9.

[3]唐誠.Redis數(shù)據(jù)庫在微博系統(tǒng)中的實踐[J].廈門城市職業(yè)學院學報,2012,14(3):55-59.

[4]曾超宇,李金香.Redis在高速緩存系統(tǒng)中的應用[J].微型機與應用,2013(12):11-13.

[5]張景云.基于Redis的矢量數(shù)據(jù)組織研究[D].南京:南京師范大學,2013.

[6]范建永,龍明,熊偉.基于HBase的矢量空間數(shù)據(jù)分布式存儲研究 [J].地理與地理信息科學,2012,28(5):39-42.

[7]唐建智.基于云計算的海量空間信息存儲與計算研究 [D].北京:中國科學院遙感應用研究所,2012.

[8]邵應泉.基于百度地圖API實現(xiàn)自動氣象站點信息顯示[J].電腦知識與技術(shù),2013(27):6062-6063.

[9]沈娣麗,上官同英,孟雅俊,等.Zigbee和百度地圖API在農(nóng)田信息采集系統(tǒng)中的應用[J].中國農(nóng)機化,2012(4):184-188.

[10]王紅崧,周海晏.基于百度地圖API的旅游地理信息系統(tǒng)開發(fā)[J].現(xiàn)代計算機(專業(yè)版),2012(23):60-63.

[11]岳泉.基于谷歌地圖的車輛遠程監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D].武漢:武漢理工大學,2013.

[12](美)澤卡斯 (Zakas,N.C.),著.JavaScript高級程序設(shè)計[M].北京:人民郵電出版社,2012.

[13]林國,李偉超.基于AJAX的富互聯(lián)網(wǎng)應用框架研究[J].實驗室研究與探索,2012,31(7):92-97.

[14]周楊.AJAX應用的典型設(shè)計模式[J].計算機系統(tǒng)應用,2011(1):128-132.

[15]薛峰,梁鋒,徐書勛,等.基于Spring MVC框架的Web研究與應用[J].合肥工業(yè)大學學報:自然科學版,2012(3):337-340.

A method of obtaining vehicle track information based on Redis

XU Fang-fang1,ZHANG Jin-song2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430070,China;2.Wuhan YCIG iLink Technology Company Limited,Wuhan 430070,China)

Most companies get in the GPS[1]vehicle trace information mainly through the vehicle terminal and GPS communicated,to store in database.For transportation enterprises,the above method to the acquisition of vehicle trace information,will generate a large economic burden.Therefore,this paper proposes a combination way of Java Timer and Guava cache to get the vehicle trace information of transport enterprise from Redis[2-5]database.The aim to make transport enterprise get vehicle trace information and query vehicle trajectory[6].

Guava cache; Redis; Java timer

TN02

A

1674-6236(2017)17-0054-04

2016-07-18稿件編號:201607131

徐芳芳(1991—),女,湖北孝感人,碩士研究生。研究方向:通信與信息工程、軟件設(shè)計。

猜你喜歡
設(shè)置數(shù)據(jù)庫信息
中隊崗位該如何設(shè)置
少先隊活動(2021年4期)2021-07-23 01:46:22
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
本刊欄目設(shè)置說明
中俄臨床醫(yī)學專業(yè)課程設(shè)置的比較與思考
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
地鐵出入段線轉(zhuǎn)換軌設(shè)置
主站蜘蛛池模板: 亚洲高清国产拍精品26u| 国产乱人视频免费观看| 国产亚洲欧美日韩在线一区二区三区| 国产精品三级专区| 久久精品只有这里有| 丁香五月亚洲综合在线 | 日韩国产 在线| 亚洲欧洲天堂色AV| 亚洲中字无码AV电影在线观看| 国产免费羞羞视频| 国产精品九九视频| 丰满人妻久久中文字幕| 国产资源免费观看| 色综合日本| 国产精品精品视频| 国产精品亚洲一区二区三区z| 久久精品亚洲热综合一区二区| 久久久久人妻一区精品| 免费国产黄线在线观看| 真实国产乱子伦高清| 福利在线不卡一区| 日韩午夜福利在线观看| 成人国产精品网站在线看| 91福利在线看| 国产亚洲欧美日韩在线一区二区三区| 成年人福利视频| 國產尤物AV尤物在線觀看| 欧美日韩亚洲国产主播第一区| 国产精品无码影视久久久久久久| 天堂成人在线| 久久免费视频6| 国产精品视频a| 精品国产免费观看| 亚洲AV人人澡人人双人| 亚洲AV成人一区二区三区AV| 国产激情在线视频| 国产日韩欧美视频| 欧美人在线一区二区三区| 亚洲成人网在线观看| 国产精品yjizz视频网一二区| 精品国产成人三级在线观看| 99在线观看国产| 国产人成在线视频| 97se亚洲综合在线| 国产精品专区第1页| 国产激情无码一区二区APP| 国产精品成人啪精品视频| 久久久受www免费人成| 五月婷婷丁香综合| 亚洲第一视频网| 国产成人a在线观看视频| 欧美国产日韩在线| 日韩专区欧美| 亚洲男人在线| 国产美女在线观看| 第九色区aⅴ天堂久久香| 国产超碰一区二区三区| 国产精品免费电影| 成人毛片免费在线观看| 国产尤物jk自慰制服喷水| 香蕉久久国产精品免| 色欲不卡无码一区二区| 天堂va亚洲va欧美va国产 | 囯产av无码片毛片一级| 亚洲v日韩v欧美在线观看| 欧美yw精品日本国产精品| 91亚洲视频下载| 国产一区二区免费播放| 99在线观看国产| 毛片一级在线| 日本人真淫视频一区二区三区| 亚洲精选高清无码| 亚洲综合专区| 亚洲高清国产拍精品26u| 免费一级大毛片a一观看不卡| 人人妻人人澡人人爽欧美一区| 在线欧美日韩| 99成人在线观看| 天堂岛国av无码免费无禁网站| 国产精品护士| 毛片在线看网站| 在线观看国产精美视频|