需求: 項目有一個保存實時抓拍圖片的功能,須要統計攝像頭下每一個時間點(好比一分鐘)保存的圖片個數,並經過線型圖顯示到頁面上.
這很相似股票的分時K線圖的功能.因此我參考了一些網上的文章,採用Redis
來實現這個功能.
先交代一下項目裏數據的一個狀況:前端
需求分析:redis
接下來重點說一下這裏的設計:數據庫
count+ip
,field
爲yyyy-MM-dd HH:mm
的分鐘時間點,value
則爲圖片個數.好比192.168.0.1
這個ip的攝像頭每抓拍到一張圖,則redis 操做命令爲 HINCRBY 'count:192.168.0.1' '2018-08-10 10:30' 1
. 固然,這裏會作一個定時任務,每分鐘都會初始化每一個攝像頭當前時間點抓拍圖片個數爲0,操做指令爲HSETNX 'count:192.168.0.1' '2018-08-10 10:30' 0
,防止查詢時找不到對應時刻的數據.因爲hash是不支持直接傳入過時時間的,因此也須要在定時任務裏刪除掉24小時以前的數據:HDEL 'count:192.168.0.1' '2018-08-09 10:30'
.zset
結構,保存圖片信息數據. 這裏 zset
的key
爲info:+ip
,value
爲圖片信息的json
數據,如圖片的地址,特徵id,id等,score
則保存的時當前距計算機元年的秒數.之因此這樣設計是爲了方便從新統計和排序.hash
結構中對應key
的數據,裏面存儲了最近24小時的統計數據,經過new一個TreeMap能夠對時間進行排序,而後mao的key和value就是x,y軸所需的兩個數組.獲取完成後,每分鐘去輪詢一次查詢當前攝像頭,上一分鐘的數據,這樣能保證數據和時間點一致.zset
結構裏的ZRANGEBYSCORE
命令查詢所需時間段的圖片信息.也能夠從新統計每一個時間點的圖片個數.同時這裏也要在第2步的定時任務裏作一個ZREMRANGEBYSCORE
操做移除24小時前的數據.到這裏整個設計思路就展現差很少就基本完成了.固然這不是所有,還有些細節,好比定時任務是否正常執行,數據持久化,服務down掉了怎麼處理等.json
有時間把一些設計思路的代碼寫出來.數組