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