Redi中Lua脚本拓展

Redis事务

  1. redis中提供了multi和exec两个命令来使一组命令的执行能够保证事务特性,在事务中执行的命令不会马上执行,而是返回queued,当执行中出现命令错误的操作时,已执行的命令不会成功。
    在这里插入图片描述
  2. 当在某些情况下,操作某个键时,需要该键在事务过程中没有被修改才执行成功时,通过watch命令来实现,如果事务过程中有对键值的修改,那么事务不会执行,下面是两个客户端下事务过程中对键修改事务未生效的演示:
    在这里插入图片描述
    在这里插入图片描述
  3. redis中实现的事务功能相对简单,毕竟其不能实现多个执行命令之间的逻辑关系计算,从而无法实现回滚操作。

Lua脚本

  1. Lua脚本语言,于1993年的巴西里约热内卢天主教大学的三人研究小组开发而成,其灵活的嵌入到应用程序中,从而为应用程序提供了灵活的扩展性和定制功能。
  2. Lua API
  3. redis中执行lua脚本的好处:
    • lua脚本在redis中是原子执行的,执行过程中不会插入其他命令
    • lua脚本可以在redis中定制出一些发开人员需要的命令,并且该命令一次加载后可多次的复用
    • lua脚本可以将多条命令一次性打包执行,较少网络开销
  4. redis中对lua脚本的管理:
    • eval script numkeys key [key …] arg [ arg …],执行lua脚本
      • 命令解析:
        • script:需要执行的lua脚本
        • numkeys:key的数量
        • key [key …]:一个或是多个key
        • arg [arg …]:一个或多个参数
        • 在使用是可通过 KEYS[index]和ARGV[index]来获取键和参数,值得注意的是这里的index是指的从左往右排起的第几个键或第几个参数,所以是从1开始计数的。
        • 在lua脚本中可以使用redis.call或redis.pcall来执行redis中的命令,二者唯一不同的是使用call的话,如果产生报错那脚本将不在往下执行,而pcall则会继续往下执行。
        • 如果脚本过长 可通过redis-cli --eval来执行脚本
          在这里插入图片描述
    • evalsha sha1 numkeys key [key …] arg [ arg …],执行script load加载后的lua脚本
      • 参数解析:
        • sha1:与eval不同,其脚本是直接通过命令进行传递的,但是当脚本过大的时,可能会造成redis的阻塞,而evalsha命令执行的是通过script load命令已经加载到redis实例中的lua脚本引用,通过引用而直接指向lua脚本并执行,其脚本在一次加载之后能够多次的使用。
        • 其他的参数与eval相同
      • script load 脚本,加载lua脚本返回SHA1的标识字符串
        在这里插入图片描述
      • redis-cli script load lua脚本或lua脚本文件
        在这里插入图片描述
    • script exists sha1 [sha1 …],判断一个或多个sha1是否存在
      在这里插入图片描述
    • script flush,清空redis中所有已被加载的lua脚本
      在这里插入图片描述
    • script kill,杀死当前正在执行的脚本
      • 但是当执行的脚本正在进行写操作时,那script kill将不能杀死该脚本。
        在这里插入图片描述
    • 需要注意的是,因为在redis中执行lua脚本时是阻塞执行的,在redis中对lua脚本的执行时间设置了一个警告值:lua-time-limit,默认是5秒当执行时间超过该警告值时,其他客户端在操作数据时就会收到错误提交
      在这里插入图片描述
  5. lua脚本调试
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值