之前在工作中需要用到將一個尾表放入redis中便於查詢。但是該文件內容每天都會變化。所以得寫定時器定時讀取最新文件然后錄入redis中。但是分析日志發現,每次執行該任務都要花費好幾個小時,太慢了,作為一個程序員這怎么能接受,就想着給優化一下.
首先想到的是多線程同時讀這個文件,但是多線程讀同一個文件感覺不好控制,就想着先把文件拆分成大小一樣的小文件(分別給文件名后綴添加_1,_2...),然后每個線程讀取各自的文件。通過對比之下時間,之前得四五個小時才能執行完的定時任務在一小時之內就完成了。后來一個同事看到我寫的,說為什么不試試輪詢隊列呢。就是一個類讀文件然后以統一格式寫入queue中,另外一個類讀取隊列插入redis中。於是我直接在讀取小文件線程又加入了隊列,結果執行時間又減少了1/4.總體結果還是令人滿意的.
不過需要注意的queue的實現有好幾種,區分線程安全的非線程安全的使用場景.