redis中使用lua腳本 使用和學習


   最近工作中要做一個秒殺系統,用戶的秒殺次數、分享數、優惠券的余額等都存放在了redis中,所以需要對多條redis的操作保證原子性。

   當然可以在服務器端做鎖操作,不過更為方便的是在redis端操作。

   於是想到了redis的lua腳本,lua腳本能夠保證redis執行的原子性(當然如果lua腳本報錯的話,無法回滾掉已執行的部分代碼的)

   lua的基本語法:

               變量定義:local 為標識符,代表局部變量。(在redis lua解釋器中禁用全局變量,所以變量都需要標識local)

               字符串拼接:..   如:'a'..'b'

               類型轉換:tonumber(a)

               判斷值為nil : not 

               邏輯判斷: and,or

 

   lua學習:

   redis中如果想要使用lua腳本,只需要調用eval命令即可。如果是在Java環境中,也有對應的eval(...)方法。

   lua 中也分為局部變量和全局變量,不過redis為了防止數據污染,就限定了lua腳本中只允許使用局部變量

   局部變量以local定義,比如:

         local temp = keys[1]

  eval 命令:

         eval命令分為,腳本、key 數量,keys ,argv等,格式如下:

         eval "   local key = KEYS[1]     

                    local c = redis.call('set',KEYS[2],ARGV[1])

                    if key == 'a' then

                         return c   

                    else

                         return 1

                    end "

            2 b a 3

         "local key = KEYS[1]    #定義局部變量,將外部設定的key賦值給key變量

          local c = redis.call('set',KEYS[2],ARGV[1])   #將值賦值給key2 然后set到redis中,並給一個返回值 

          if key == 'a' then   #判斷傳入的key

                return c 

          else

                return 1

          end "

         最終的返回值為1

      

      


免責聲明!

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



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