zoukankan      html  css  js  c++  java
  • redis lua脚本学习

    语法格式(常见)

    a = 5               -- 全局变量
    local b = 5         -- 局部变量

    Eval的使用

    EVAL script numkeys key [key ...] arg [arg ...]

    首先大家一定要知道eval的语法格式,其中:

       <1> script:     你的lua脚本

       <2> numkeys:  key的个数

       <3> key:         redis中各种数据结构的替代符号

       <4> arg:         你的自定义参数

    ok,可能乍一看模板不是特别清楚,下面我可以用官网的小案例演示一下:

    eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 username age jack 20

    上面这一串代码大概是什么意思呢? 第一个参数的字符串就是script,也就是lua脚本。2表示keys的个数,KEYS[1] 就是 username的占位符, KEYS[2]就是

    age的占位符,ARGV[1]就是jack的占位符,ARGV[2]就是20的占位符,,以此类推,,,所以最后的结果应该就是:{return username age jack 20} 是不

    是有点像C#中的占位符:{0}呢??? 下面我在Redis中给大家演示一下:

    [root@localhost Desktop]# redis-cli
    127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 username age jack 20
    1) "username"
    2) "age"
    3) "jack"
    4) "20"
    127.0.0.1:6379>

    通常境况下,我们不要在redis-cli中直接写lua脚本,这样非常不方便编辑,通常情况下我们都是把lua script放到一个lua文件中,然后执行这个lua脚本,比如

    下面这样:

    然后我们通过下面命令执行,这种方式和前面介绍的不一样,参数 --eval script  key1 key2 , arg1 age2 这种模式,key和value用一个逗号隔开就好了,

    最后我们也看到了,数据都出来了,对吧。

    [root@localhost Desktop]# redis-cli --eval /usr/redis/sbin/1.lua username age , jack 20
    1) "username"
    2) "age"
    3) "jack"
    4) "20"
    [root@localhost Desktop]# 

    测试list获取

    1. 通过lua脚本获取指定的key的List中的所有数据

    local key=KEYS[1]
    
    local list=redis.call("lrange",key,0,-1);
    
    return list;

    这里面的redis.call就是用来执行redis中list的lrange命令,接下来我通过lpush给person塞入三条数据,如下:

    [root@localhost Desktop]# redis-cli
    127.0.0.1:6379> lpush person mary jack peter
    (integer) 3
    127.0.0.1:6379> 

    然后我们来执行这个lua脚本,效果如下图,是不是很牛逼的感觉???

  • 相关阅读:
    B. Spreadsheets
    Frequent values 倍增/线段树离散化
    E. Tree Painting 二次扫描换根法
    1405 树的距离之和 二次扫描换根法
    D. Subarray Sorting
    K
    Max answer(单调栈,rmq)
    POJ2823 (单调队列)
    POJ2559(单调栈入门)
    Principles and strategies for mathematics study
  • 原文地址:https://www.cnblogs.com/uoar/p/9758931.html
Copyright © 2011-2022 走看看