php開發lua-redis腳本踩坑

php開發lua-redis腳本踩坑

問題復現

在業務開發中,需要反覆讀取並設置redis數據,爲防止出現數據髒讀現象,所以把一次操作寫成lua腳本去redis中執行,在redis單進程下,使數據保持強一致性,但是後來開發完的腳本在本地可以正常運行,但是在測試環境不行

查找原因

在反覆對比了測試環境與本地環境的區別,以及不停調整lua腳本測試得知,出現的原因是測試環境php與redis插件版本偏低,導致lua腳本腳本中無法執行二維數組
測試環境php版本:7.1,redis插件版本:3.1.2
本地環境php版本:7.2,redis插件版本:5.1

$lua = <<<LUA
	a = {1,2,3}
	b = {a}
LUA;

上面的代碼在測試環境執行後就會返回false,而在本地環境就可以正常執行

解決方法

  1. 將php,redis插件進行升級
    優點:高版本的插件性能更好,功能也更強大
    缺點:需要對系統環境進行升級,有一定的風險,需要對項目進行風險評估
  2. 對代碼結構進行調整
    優點:安全,有效,可以用cjson.encode將二維數組拍成一維數組,在php中恢復即可
    缺點:增加腳本複雜度,降低性能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章