zoukankan      html  css  js  c++  java
  • node.js怎么调用lua脚本操作redis

    1、首先要知道redis是怎么eval lua 脚本的:

    
      eval "local cap=10 if(redis.call(ARGV[1],KEYS[1])+0 < cap) then return redis.call('INCR',KEYS[1]) end return cap" 1 test get
    

      eval 是命令

      "local cap=10 if(redis.call(ARGV[1],KEYS[1])+0 < cap) then return redis.call('INCR',KEYS[1]) end return cap" 是 脚本

    数字1 是你要跳过几个key名字
    

      test就是这个key名

      get就是参数

      要是要传俩key就是 2 key1 key2 然后就是参数 也可以跟多个

      -----

      你也可以把脚本写好放进redis,比如脚本文件是limit.lua

      在命令行输入

       ./redis-cli SCRIPT LOAD "$(cat limit.lua)"
    

      就会返回一串字符串,类似:c62c79f4ab0135aecfb530082be965d52b6cecc4

      你就可以在redis终端输入 evalsha c62c79f4ab0135aecfb530082be965d52b6cecc4 1 test get 调用这个脚本

      或者在终端调用 ./redis-cli evalsha c62c79f4ab0135aecfb530082be965d52b6cecc4 1 test get 调用

      参数一样

      想要清理这些redis的脚本就 SCRIPT FLUSH 一下就行了

    2、node里调用

    async function (params = '', limit = 10) {
      const result = await redis.eval(fs.readFileSync(path.resolve() + '/service/lua/test.lua', 'utf-8'), 1, test, 'GET',12);
      return result;
    }
     redis.eval(脚本,跳过几个Key,然后参数就行了)
    
  • 相关阅读:
    JavaScript实现html购物车代码
    SQLServer2019安装教程
    SQLServer2019安装教程
    pragma指令简介
    16进制字符串转数字(C/C++,VB/VB.net,C#)
    对方网络非正常断开检测方法
    stl map高效遍历删除的方法
    memmove 和 memcpy的区别
    Socket 心跳包机制总结
    如何将内存中的位图数据绘制在DC上
  • 原文地址:https://www.cnblogs.com/JohannaFeng/p/10443176.html
Copyright © 2011-2022 走看看