一次C端線上緩存問題的總結
做C端需求的第二週,有個小需求,需要將從中央配置中心的拿回來的數據做一個緩存,保證數據訪問快速。
由於項目中直接有ehcache,集成spring-boot,所以開發起來比較簡單,只是隨手加上了@Cacheable註解,並在需要清除緩存的時候加上了@CacheEvict。
當然,正常情況下沒有任何問題。
結果….
突然當配置中心掛了的時候,我們把null值緩存進去了,導致的是緩存生效的剩餘時間裏,服務都是不可用的。
也算是個線上事故了。
犯得錯誤有點不應該,以此文來記錄,並總結錯誤。
總結:
- 對使用的組件的所有功能應該有全面的認識再用
- 如果使用的是新註解,應該對註解的所有的參數有了解才用
- 多考慮代碼的邊界情況,異常情況
- http請求總會失敗
- 墨菲定律,壞事只要有可能,就一定會出現。
修正後代碼:
加上unless即可,意爲除了result==null下緩存。
@Cacheable(value = "hostsCache", key = "#appId",unless = "#result == null)