RedisLua整合

Lua

 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能

Redis中使用LUA的好处

  • 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行
  • 原子操作,redis会将整个脚本作为一个整体执行中间不会被其他命令插入
  • 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑

Lua安装

CentOS7默认安装的有Lua
在这里插入图片描述
交互环境
RedisLua整合_第1张图片

RedisLua整合

Eval命令

EVAL script numkeys key [key …] arg [arg …]

在这里插入图片描述

  • script

Lua脚本程序,它会被运行在Redis服务器上下文中,这段脚本不必(也不应该)定义为一个Lua函数。

  • numberkeys

用于指定键名参数的个数

  • key[key…]

从EVAL的第三个参数开始算起,使用了numkeys个键(key),表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量KEYS数组,用1为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)这里使用的是1个key

  • arg[arg…]

可以在Lua中通过全局变量ARGV数组访问

Lua脚本中调用Redis命令

在这里插入图片描述
命令

  • redis.call()
  • redis.pcall()

区别:使用不同的方式处理执行命令所产生的错误

SCRIPT命令

  • SCRIPT FLUSH :清除所有脚本缓存
  • SCRIPT EXISTS :根据给定的脚本校验和,检查指定的脚本是否存在于脚本缓存
  • SCRIPT LOAD :将一个脚本装入脚本缓存,返回SHA1摘要,但并不立即运行它
    在这里插入图片描述
  • SCRIPT KILL :杀死当前正在运行的脚本

EVALSHA命令

EVAL 命令要求在每次执行脚本的时候都发送一次脚本主体(script body)。

  • Redis 有一个内部的缓存机制,因此它不会每次都重新编译脚本.
  • 为了减少带宽的消耗, Redis 实现了 EVALSHA 命令,它的作用和 EVAL 一样,都用于对脚本求值,但它接受的第一个参数不是脚本,而是脚本的 SHA1 校验和(sum)

脚本的SHA1校验和可以使用ScriptLoad命令获得
在这里插入图片描述
使用方式
在这里插入图片描述

你可能感兴趣的:(Redis)