發現問題的緣由是發現項目日誌忽然增大了10倍,後來發現日誌中不停的在打印一個不停循環處理任務的線程日誌。線程中的處理邏輯用到了redis的緩存鎖。html
reids的緩存鎖實現再也不詳細說,,簡單的歸納就是使用setnx的命令,使用時還須要設置過時時間。redis
在redis1.0時,redis對setnx命令的支持只有這一個命令。這就致使設置key,和設置過時時間的時候並不能作到事務性的提交,會存在設置過時時間不成功的可能,再加上墨菲定律就會遇到這種狀況。緩存
我以前看的文檔比較老,就只看到了redis1.0的文檔,就直接致使了此次問題的產生。線程
下面是從新找到了redis新版本的功能。日誌
從2.6.12版本開始,redis爲SET
命令增長了一系列選項code
EX
seconds – Set the specified expire time, in seconds.PX
milliseconds – Set the specified expire time, in milliseconds.NX
– Only set the key if it does not already exist.XX
– Only set the key if it already exist.htm
EX
seconds – 設置鍵key的過時時間,單位時秒PX
milliseconds – 設置鍵key的過時時間,單位時毫秒NX
– 只有鍵key不存在的時候纔會設置key的值XX
– 只有鍵key存在的時候纔會設置key的值注意: 因爲SET
命令加上選項已經能夠徹底取代SETNX, SETEX, PSETEX的功能,因此在未來的版本中,redis可能會不推薦使用而且最終拋棄這幾個命令。blog
修改使用新的命令就能夠排除上面提到的問題。事務