当前位置:   article > 正文

Lua脚本

lua脚本

Lua脚本

1、概念

Lua是一个轻量、简洁、可扩展的脚本语言

特点:

  • 轻量:编译后体积很小
  • 简洁:由C编写,启动快,运行快
  • 可扩展:可内嵌到各种编程语言或者系统中运行;提升静态语言的灵活性;不需要担心语法问题

2、优点

  1. 原子性:将Redis的多个操作合成一个脚本,然后整体执行,在脚本的执行中,不会出现资源竞争的问题。
  2. 减少网络通信:把多个命令合并成一个lua脚本,redis统一执行脚本。
  3. 复用性:client发送的脚本会永久存储在Redis中,其他客户端可以复用这个脚本来完成同样的逻辑。

3、redis操作lua脚本

 eval script numkeys key [key ...] arg [arg ...]
  • 1
  • eval:执行lua脚本的命令
  • script:lua脚本
  • numkeys:key个数
  • key [key …]:lua脚本中的KEYS名字, key的列表
  • arg [arg …]:lua脚本中的 ARGV 的值,value的列表
入门案例

KEYS 索引是从1 开始的 ,ARGV也是如此。

127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 feige achao
1) "key1"
2) "key2"
3) "feige"
4) "achao"
  • 1
  • 2
  • 3
  • 4
  • 5

代码含义:可以把对应的keys进行填充返回。

127.0.0.1:6379> EVAL "return 1" 2 key1 key2 feige achao
(integer) 1
  • 1
  • 2

“return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}”“return 1”

注意:redis默认情况下支持lua脚本,给lua脚本提供了一个redis的对象。这个对象提供call方法,call方法可以调用redis任何的命令

-- 成功返回1、没有设置返回0
-- 如果redis没找到。就直接添加
if redis.call('get',KEYS[1]) == nil then
    redis.call('set',KEYS[1],ARGV[1]);
    redis.call('expire',KEYS[1],ARGV[2]);
    return 1;
end

-- 如果旧值等于新值,不进行操作,如果不相同就执行更新
if redis.call('get',KEYS[1]) == ARGV[1] then
    return 0;
else
    redis.call
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/859051
推荐阅读
相关标签
  

闽ICP备14008679号