redis環境:redis集群(含哨兵模式,部在了兩台Linux系統的機器上,每台機器四個節點,2主2備)
存儲內容:Submit對象(公司代碼里面的,對象里只有手機號碼和短信內容不同,其他字段值都一樣)
主要邏輯:存:生成submit對象-->對象轉json/byte數組-->向redis存入json字符串/byte數組
取:根據key值(先設定好)從redis值-->轉化為json/byte數組
其中,submit對象和json的轉化是用的alibaba的fastjson,對比了幾種jar,只有這個最快。項目中每個過程都是記錄時間的,比如說最開始記錄時間,生成完所有的submit對象,記錄一次,轉化成json字符串/byte數組,記錄一次.....為的就是對比之后得出結論,能優化的優化,不能優化的看時間。
還有,由於組長說實際的環境上應該是redis集群部在四台機器上,所以我把每個過程用四個線程來跑。然后所有的線程跑完后在用jedis.info(()來統計下每種存儲方式存完數據機器內存的變化。
直接貼結果:
10w數據 | 時間 | 內存占用 |
存json | 10s | 14M |
存byte | 6s | 6M |
存jsonMap | 10s | 20M |
存byteMap | 4s | 4M |
取json | 7s | |
取byte | 4s | |
取jsonmap | 7s | |
取bytemap | 4s |
最后的結果就是:10w數據的時候,submit轉json的過程要比submit轉byte數組慢了2-3s,存redis的時候又慢了2s;100w數據的時候,存string的方式直接3個線程掛了,存byte也掛了1個線程。綜上來說,存byte的方式要優於存string。