參考原文:http://redis.io/topics/latencymysql
最近數據量愈來愈多,併發寫操做不少的狀況下,Redis出現響應慢的狀況;ios
可使用 Redis命令來測試一下redis的響應速度:redis
redis-cli --latency -h 'xxx' -p 'xxxx'
這條命令會向Redis插入示例數據來檢查平均延時。 Ctrl+C能夠隨時結束測試;
sql
下面咱們列一下會出現延時的可能:shell
硬件,系統:硬件問題是全部問題最底層的問題了,若是硬件慢,例如CPU主頻低,內存小,磁盤IO慢,這些會讓全部運行在上面的系統響應慢;另外,使用虛擬機會讓系統運行的性能太爲降低;固然,有錢的話,這問題很容易解決;系統方面,Linux自己的系統資源調度也會產生必定的延時。這些通常不會很大,能夠忽略不計;服務器
網絡:若是客戶端和redis在同一臺服務器上,使用socket創建鏈接會比監聽 TCP/IP 端口快不少;網絡
Redis命令:一些時間複雜度比較高的命令,如 lrem,sort,sunion等命令會花比較長時間;另外,大量的重複鏈接也會形成延時,重用鏈接是一種很好的品質;若是有大量寫操做,可使用 pipeline 管道的方式(相似mysql事務),一次性提交,這樣數據量也少了,鏈接次數也少了,不用每次都返回數據,速度天然會快不少;併發
持久化:Redis持久化須要fork出一個進程來進行持久化操做,這自己就會引起延時,若是數據變化大,RDB配置時間短,那這個代價仍是挺大的;再加上,硬盤這東西真有點不靠譜,若是仍是虛擬機上的虛擬硬盤,若是仍是NFS共享目錄,那這延時會讓你崩潰。因此,若是系統不須要持久化,關了吧。socket
Redis提供了SlowLog能夠供咱們分析執行速度慢的命令,能夠分析一下;操做系統方面,可使用 iostat 查看一下硬盤速度,使用 vmstat 查看一下內存分頁狀況;性能
總體優化好,系統響應纔會更快;