為什么Redis中lua腳本可以保證原子性?


看法:

  背景:在我們使用redis的時候可能會在一些場景下使用到一些特殊的功能,但是redis現有的命令不滿足我們的需求,所以我們需要自定義一些命令,但是我們自定義命令一般是多個指令結合在一起的,所以會存在並發執行中數據被修改問題,這就要求我們的自定義命令是原子性的,排它性的,在執行這個命令的時候不允許其他腳本、命令執行。

在redis 的官方文檔中有描述lua腳本在執行的時候具有排他性,不允許其他命令或者腳本執行,類似於事務。但是存在的另一個問題是,它在執行的過程中如果一個命令報錯不會回滾已執行的命令,所以要保證lua腳本的正確性

 

查閱總結:

  lua腳本在執行的時候不允許其他命令出入並發執行,而且他們有兩個運行的函數call()和pcall(),兩者區別在於,call在執行命令的時候如果報錯,會拋出reisd錯誤終端執行,而pcall不會中斷會記錄下來錯誤信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM