Redis Lua 脚本

Redis Lua 脚本介绍

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

因为广泛的应用于:游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件等。比如:Lua脚本用在很多游戏上,主要是Lua脚本可以嵌入到其他程序中运行,游戏升级的时候,可以直接升级脚本,而不用重新安装游戏。

Redis 在 2.6 版推出了脚本功能,允许开发者使用 Lua 语言编写脚本传到 Redis 中执行。在 Lua 脚本中可以调用大部分的 Redis 命令。Redis 使用内置的 Lua 解释器,可以对 Lua 脚本进行求值。

使用脚本的好处如下:

(1)减少网络开销:有时一段代码需要向Redis发送多次请求,而使用脚本功能完成同样的操作只需要发送一个请求即可,减少了网络往返时延。

(2)原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说在编写脚本的过程中无需担心会出现竞态条件,也就无需使用事务。事务可以完成的所有 功能都可以用脚本来实现。

(3)复用:客户端发送的脚本会永久存储在Redis中,这就意味着其他客户端(可以是其他语言开发的项目)可以复用这一脚本而不需要使用代码完成同样的逻辑。

Redis 操作 lua 相关命令

EVAL

命令作用:执行 lua 脚本

EVAL 的第一个参数是一段 Lua 脚本程序。 这段Lua脚本不需要(也不应该)定义函数。它运行在 Redis 服务器中。

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

在命令的最后,那些不是键名参数的附加参数 arg [arg …] ,可以在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

举例说明:

> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

注意:返回结果是Redis multi bulk replies的Lua数组,这是一个Redis的返回类型,客户端库可能会将他们转换成数组类型。

EVALSHA

命令作用:执行 lua 脚本

根据给定的 SHA1 校验码,对缓存在服务器中的脚本进行求值。 将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。 这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样。

EVALSHA sha1 numkeys key [key ...] arg [arg ...]
SCRIPT LOAD

将 lua 脚本 script 添加到脚本缓存中,但并不立即执行该脚本。

在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。 EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。

脚本可以在缓存中保留无限长的时间(直到执行 SCRIPT FLUSH 为止) 如果给定的脚本已经在缓存里面了,那么不做动作。

返回值:

bulk-string-reply 该命令返回给定 script 的 SHA1 校验和

SCRIPT EXISTS

命令作用:查看指定的脚本是否已经被保存在缓存当中

这个命令可以接受一个或者多个脚本 SHA1 信息,返回一个1或者0的列表,表示脚本存在或不存在。

返回值

array-reply:命令返回对应于每一个SHA1的数组,脚本存在返回1,不存在的返回0。

SCRIPT KILL

杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。

这个命令主要用于终止运行时间过长的脚本,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值