美文网首页
Redis之Lua学习

Redis之Lua学习

作者: 是王威啊 | 来源:发表于2019-09-29 10:06 被阅读0次

前言

Redis提供了对Lua脚本的支持。总的来说Lua脚本功能为Redis开发和运维人员带来了如下3个好处:
1.Lua脚本在Redis中是原子执行的,执行过程中不会插入其他命令。
2.Lua脚本可以帮助开发和运维创造出自己定制的命令,并可以将命令发送到
Redis内存中,实现复用的效果。
3.Lua脚本可以将多条命令一次性打包,有效的减少网络开销。

使用

在Redis中执行Lua脚本有两种方法,eval和evalsha。本章节我们重点介绍eval相关命令。

eval

eval命令如下:

   eval script numkeys key [key ...] arg [arg ...]

其中script是一段Lua的脚本程序,它会被运行在Redis的上下文中。 numkeys指定了键名参数的个数。
用一个简单的例子来概括:

127.0.0.1:6379> EVAL 'return {KEYS[1], KEYS[2], ARGV[1], ARGV[2]}' 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

在Lua脚本中,可以使用两个不同的函数来执行Redis的命令,分别是:

redis.call() 
redis.pcall()

这两个函数唯一的区别是它们使用不同的方式处理执行命令产生的错误。
redis.call()redis.pcall()两个函数的参数可以是任何格式良好的Redis命令,如下:

127.0.0.1:6379> Eval "return redis.call('set',KEYS[1],ARGV[1], 'ex', ARGV[2], 'xx')" 1 wang hui 15
OK
127.0.0.1:6379> get wang
"hui"

这个命令的意思是当key为wang存在的时候设置值为hui,并且15秒之后过期。

脚本的原子性

Redis使用单个Lua解释器去执行所有的脚本,并且Redis也保证脚本以原子性(atomic)的方式执行:当脚本正在运行的时候不会有其他的脚本或Redis命令被执行。这和使用multi/exec包围的事务很相似。在别的客户端看来,脚本的效果要么是不可见的,要么是已经完成的。
另一方面,这也意味着执行一个缓慢的脚本并不好,当这些脚本在慢吞吞的执行的时候,其他客户端会因为服务器正忙而无法执行命令。

下一篇我们来学习evalsha相关的命令。

相关文章

  • 分布式锁之redis-lua脚本

    目录 redis分布式锁,Lua,Lua脚本,lua redis,redis lua 分布式锁,redis set...

  • Redis之Lua学习

    前言 Redis提供了对Lua脚本的支持。总的来说Lua脚本功能为Redis开发和运维人员带来了如下3个好处:1....

  • 《redis学习》之lua

    Redis+Lua的好处 redis在2.6开始加入了lua脚本,使用lua脚本有如下好处: 减少网络开销。复合操...

  • Redis第四天

    Redis+Lua语言限流实战 Redis+LUA语言限流流程图 Redis+Lua语言抢红包实战

  • Redis 之 lua

    1.为什么要使用lua脚本,使用lua脚本操作redis有哪些好处 1.我现在模拟一个场景获取一个用户的购物车里面...

  • 2021-07-31_redis&Lua限流框架设计学习笔记

    20210731_redis&Lua限流框架设计学习笔记 1概述 本节主要学习分布式限流场景下,使用redis+l...

  • lua与redis pipeline

    lua Redis在2.6版引入了对Lua的支持 使用Lua可以非常明显的提升Redis的效率。 只要脚本所对应的...

  • 2021-08-06_lua脚本学习笔记

    20210806_lua脚本学习笔记 1概述 1.1为什么lua脚本具有原子性 Redis保证以原子方式执行脚本,...

  • 2022-05-02_Lua脚本操作redis锁学习笔记

    20220502_Lua脚本操作redis锁学习笔记.md 1概述 释放锁要用 lua 脚本,把检查锁是不是本线程...

  • Redis 脚本

    Redis 脚本 Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua ...

网友评论

      本文标题:Redis之Lua学习

      本文链接:https://www.haomeiwen.com/subject/vptyyctx.html