生產環境慎用 redis 模糊匹配功能!

原文鏈接:https://blog.csdn.net/daodan988/article/details/51822287/

Redis是一個key-value存儲系統。和Memcached類似,但性能遠高於memcached。現在很多大型互聯網公司都在使用redis作爲自己的緩存實現,但是如果沒有合理使用好redis,比如頻繁調用keys,info等方法,那麼會出現很嚴重的性能問題,以下就是我的真實情況。

  首先我的系統的中使用了spring data redis中的一個redisTemplate.keys()方法,用來模糊匹配,開始在測試時,滿足一切的開發功能,部署到線上後,過了大概半天,服務器出現了很高的延遲,通過aws的console觀察延遲比平時高七八倍左右。boss打電話來讓我查看問題出現的原因在哪裏。

  首先,我觀察工程的日誌,看到最多的就是jedis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool這個異常,而且很多是read timeout,首先我就是加大redis.clients.jedis.JedisPoolConfig中的maxTotal屬性的值,改了後問題依舊,這時我就估計是不是redis.clients.jedis.JedisPoolConfig中的maxWaitMillis屬性設置小了,我這邊設置的是5000,加大後還是出現上面的異常問題,百思不得其解,我登陸到redis服務器上info命令下一切都比較正常,這時我注意到了cpu比平時高很多,達到了50以上,平時都在10左右,馬上用monitor命令看了一下,出現了很多keys方法調用,馬上搜索了下keys的性能問題,得到很多的回答就是

  KEYS * 命令,當數據規模較大時使用,會嚴重影響Redis性能,也非常危險立馬改掉項目中使用redisTemplate.keys()這個方法,改了後立馬cpu降下來,延遲恢復正常,而且控制檯中也沒有read time out,connect time out 等異常信息了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章