1. 程式人生 > >使用Lua指令碼完成高併發下Redis資料修改

使用Lua指令碼完成高併發下Redis資料修改

前些天我去面試,面試官問了我一個問題,Redis快取怎麼在高併發情況下保證資料操作的原子性,我當時後懵逼了,於是回來後我就花了點時間想想怎麼去完成這個功能.具體怎麼實現請接著往下看

在看這篇文章的時候希望大家先對Lua有一個瞭解

http://blog.csdn.net/mitu405687908/article/details/51137956

http://redisbook.readthedocs.io/en/latest/feature/scripting.html

Redis相關資料

https://www.cnblogs.com/silent2012/p/5368925.html

在Redis中執行Lua指令碼

http://blog.csdn.net/mn960mn/article/details/51918886

https://www.cnblogs.com/huangxincheng/p/6230129.html

http://blog.csdn.net/u011489043/article/details/78820285

看完了這些,相信大家都對Lua和Redis有一定的瞭解了吧!接下來我就直接貼程式碼了,怎麼實現Redis在高併發環境下對快取資料的修改

Lua指令碼 


Java程式碼

設定一個測試值


模擬高併發--開三個執行緒來對name的值進行修改


這裡解釋一下listArgs的引數貌似也傳遞到Lua指令碼中了,但是我沒有用的listArgs的值,後面再研究研究

執行緒啟動:


輸出結果:


上面是結果的一部分,經過我的肉眼仔細排查,結果是完全正確的,意味著我們實現了使用Redis+Lua指令碼完成了對併發狀態下Redis快取資料的操作.在沒有使用鎖的情況下哦!!!!!

使用這種解決方案的專案包括京東的秒殺系統,可以參考http://blog.csdn.net/imxiangzi/article/details/52155451

第一次寫這個東西!~純屬分享 大家看看希望有所幫助 我一開始也查了好多好多資料  包括請教了一名遠在北京的同學(PS:因為技術的邂逅,哈哈) 

最後 有什麼不對的歡迎指出  謝謝 大家 互相學習嘛~~~