php出現Memcached::get(): could not unserialize value, no igbinary support的錯誤
之前一直注意到有個系統的錯誤log中斷斷續續出現如下的錯誤資訊。由錯誤研判,應該是放進memcache的內容有使用Igbinary。但是取出時,卻沒做對應的處理。
曾請當時負責維護的苦主同事查看,得到的答案是程式中並沒有使用igbinary。
最近在協助查另一個問題時,卻間接找到這個問題發生原因……
原來是因為,當程式將物件傳入memcache時,我們所使用的memcached會自動將物件做serialize。
memcached Runtime Configuration中提到,memcached有個memcached.serializer參數可控制寫入memcache的格式,目前有以下四種
知道可能的原因,就好處理了~比對了log,以及主機上所安裝的套件,果然是因為該系統的眾多主機中,有台主機沒有安裝Igbinary。因此,當該主機的程式由memcache取回資料時,因無法使用Igbinary而發生錯誤。
最後提一下,原本是打算將該主機上安裝Igbinary以解決這問題。但是考慮未來打算升級到PHP7,而Igbinary目前僅相容PHP5(Compatible with PHP 5.2 – 5.6)。因此,最後統一改為使用php模式(standard PHP serializer)來解決。
Severity: Warning --> Memcached::get(): could not unserialize value, no igbinary support /xxx/xxx.php
曾請當時負責維護的苦主同事查看,得到的答案是程式中並沒有使用igbinary。
最近在協助查另一個問題時,卻間接找到這個問題發生原因……
原來是因為,當程式將物件傳入memcache時,我們所使用的memcached會自動將物件做serialize。
memcached Runtime Configuration中提到,memcached有個memcached.serializer參數可控制寫入memcache的格式,目前有以下四種
- json
- json_array
- php
- igbinary
知道可能的原因,就好處理了~比對了log,以及主機上所安裝的套件,果然是因為該系統的眾多主機中,有台主機沒有安裝Igbinary。因此,當該主機的程式由memcache取回資料時,因無法使用Igbinary而發生錯誤。
最後提一下,原本是打算將該主機上安裝Igbinary以解決這問題。但是考慮未來打算升級到PHP7,而Igbinary目前僅相容PHP5(Compatible with PHP 5.2 – 5.6)。因此,最後統一改為使用php模式(standard PHP serializer)來解決。
留言