redis緩存lua腳本過多導致內存占用很多問題


現象

生產某集群各節點已使用內存比較大,在清理了大量業務無用數據后,節點已使用內存卻未下降。

排查與分析

通過info memory命令查看,內存碎片率略高,但是對某個主節點新添加的從節點內存使用依然很高,所以排除了內存碎片率的問題。

然后在info memory命令返回數據中,看到 number_of_cached_scripts 這個指標特別高,有987W,也就是說業務使用script load命令在redis服務端緩存了987W個lua腳本,占用了大量內存,因此不管怎么清理數據,內存使用率無法下降。

經過和業務溝通證實,他們未正確理解script load命令導致將每條執行的lua腳本都調用該命令進行了緩存。

調用 SCRIPT FLUSH 命令清除緩存的lua腳本即可。

script load正確使用

會被大量重復使用的lua腳本,尤其並且腳本本身比較大的情況下,應該先使用script load命令將lua腳本在redis服務端進行緩存,然后每次重復執行時,使用evalsha命令,可減少redis服務端流入流量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM