【bug描述】
【步驟】
1、【前置:當前時間是2018年2月6日】用戶A登錄客戶端A,用戶A登錄客戶端B,查看客戶端賬號被踢出登錄時的彈窗時間顯示8月24日,時間顯示錯誤。
2、【前置:該彈窗提示平台已經屏蔽】消息列表點擊任意群聊,進入群聊對話窗提示:“XX項目升級,部分功能暫停使用,敬請諒解”。
【實際結果】:
1、【前置:當前時間是2018年2月6日】賬號被踢出登錄時的彈窗時間顯示8月24日,時間顯示錯誤。
2、【前置:該彈窗提示平台已經屏蔽】進入群聊對話窗提示:“雲企信升級,部分功能暫停使用,敬請諒解”。
【預期結果】:
1、【前置:當前時間是2018年2月6日】賬號被踢出登錄時的彈窗時間顯示當前時間,時間顯示正確。
2、【前置:該彈窗提示平台已經屏蔽】進入群聊對話窗不提示:“雲企信升級,部分功能暫停使用,敬請諒解”。
【問題來源】:用戶反饋
【版本】:V1.8.0版本
【反饋時間】:2018年2月6日
【bug分析】
1、 為什么當前時間是2018年2月6日,賬號被踢出登錄時的彈窗時間顯示8月24日,時間顯示錯誤?
現網 8月份之后由運維接管,緩存數據庫(redis)未配置持久化,數據存儲在緩存中,redis服務重啟后緩存數據丟失,業務只能讀取到8月份的持久化數據。6號上午由於redis內存溢出,增大配置內存后重啟緩存數據丟失,數據錯亂,導致平台下發錯誤的消息。
2、 為什么該彈窗提示平台已經屏蔽,進入群聊對話窗提示:“雲企信升級,部分功能暫停使用,敬請諒解”?
現網 8月份之后由運維接管,緩存數據庫(redis)未配置持久化,數據存儲在緩存中,redis服務重啟后緩存數據丟失,業務只能讀取到8月份的持久化數據。6號上午由於redis內存溢出,增大配置內存后重啟緩存數據丟失,導致標志位被覆蓋,下發錯誤狀態。
3、 什么是redis持久化?持久化和非持久化區別?
Redis配置中可配置持久化策略,默認900s內有1個更改,300秒有10個更改等。配置開關默認打開,若關閉(非持久化),數據只存儲緩存中,若打開,數據將按配置策略落地到磁盤。重啟服務后,緩存中的數據將丟失。

4、 redis數據庫內存溢出觸發因素?
老模塊考勤每天定時把所有企業的用戶數據寫入redis,數據量較大,同時現網redis未做內存監控。
5、 賬號登錄跟redis的緩存關系,存了什么數據在redis?
redis存儲了用戶的token、設備id、驗證碼信息等。用戶token登錄時,會首先校驗用戶的設備,若終端入參的設備id與token不一致,平台認為用戶更換了設備,會下發通知。
6、 如何規避redis數據庫內存溢出風險?
①消耗內存的模塊需盡快改造或停止,業務中使用redis需設置有效時間。②現網針對基礎軟件服務的監控(磁盤、內存等)需完善。③開發設計評審時關注開發模型對redis的寫頻率,以及消耗大小,評估對redis內存消耗的風險。
【經驗總結】
1、后續測試中,業務中涉及到redis,提醒開發需要設置有效時間,消耗內存的模塊需盡快改造或停止,現網針對基礎軟件服務的監控(磁盤、內存等)需要完善,開發設計評審時關注開發模型對redis的寫頻率,以及消耗大小,評估對redis內存消耗的風險。
