武汉嵌入式培训
达内武汉民大中心

15827352908

热门课程

Lua在Redis中的应用

  • 时间:2018-01-31 15:51
  • 发布:达内
  • 来源:互联网

    redis从2.6版本开始内置支持Lua解释器,解释器提供了3个函数来处理redis的命令redis.call() redis.pcall()和 redis.log,同时redis 也保证脚本会以原子性的方式执行。这是一个很重要的因素。
    本文涉及到的命令有 EVAL EVALSHA SCRIPT LOAD SCRIPT FLUSH SCRIPT EXISTS SCRIPT KILL
    redis.call(), redis.pcall() 函数的区别就是处理错误异常的情况不同,其他的功能是一样的 具体使用哪个看需求而论
    redis.call() 执行命令的过程中发生错误时,脚本会停止执行,并返回一个脚本错误
    redis.pcall() 执行命令的过程中发生错误时,脚本会继续执行,但是会记录错误信息 返回一个带 err 域的 Lua 表(table)
    redis.log(loglevel, message) 触发redis记录日志 日志级别有 redis.LOG_DEBUG redis.LOG_VERBOSE redis.LOG_NOTICE redis.LOG_WARNING
    EVAL
    EVAL命令对 Lua 脚本进行执行求值。
    语法:EVAL script numkeys key [key …] arg [arg …]
    script lua脚本内容 注意的是脚本不应该是Lua函数。
    numkeys 表示指定键名参数的个数。
    key [key …] 表示脚本对应的key值列表 在脚本中可以使用KEYS[1] KEYS[2] KEYS[3]KEYS[n] n从1开始 .
    arg [arg …] 命名行中传递的参数列表 在脚本中可以使用ARGV[1] ARGV[2] ARGV[3]ARGV[n] n从1开始 .
    一个示例胜过千言万语的解释

    eval “return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}” 2 id name 3 mytest

武汉软件测试培训

    执行上面脚本返回
    1) “id”
    2) “name”
    3) “2”
    4) “mytest”
    EVALSHA
    此命令和EVAL的区别是EVAL每次都需要传入脚本的主体内容,对网络带宽不是很友好。而EVALSHA命令正好可以解决这个问题。
    语法: EVALSHA sha1 numkeys key [key …] arg [arg …]
    sha1 缓存中的sha值 这个值可以利用SCRIPT LOAD生成
    numkeys 表示指定键名参数的个数。
    key [key …] 表示脚本对应的key值列表 在脚本中可以使用KEYS[1] KEYS[2] KEYS[3]KEYS[n] n从1开始 .
    arg [arg …] 命名行中传递的参数列表 在脚本中可以使用ARGV[1] ARGV[2] ARGV[3]ARGV[n] n从1开始 .
    > SCRIPT LOAD “return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}”
    “a42059b356c875f0717db19a51f6aaca9ae659ea”
    > EVALSHA a42059b356c875f0717db19a51f6aaca9ae659ea 2 id name 2 mytest
    1) “id”
    2) “name”
    3) “2”
    4) “mytest”
    >
    1、首先利用SCRIPT LOAD把脚本的主体缓存在redis中,会返回一个sha的key

    2、EVALSHA 执行命令 把sha带上 其他的和eval没有区别。

更多武汉嵌入式培训相关资讯,请扫描下方二维码

武汉软件测试培训

上一篇:Redis 重要特性
下一篇:.NET平台微服务项目汇集

武汉嵌入式培训:嵌入式Linux技术精讲

武汉嵌入式培训:嵌入式Linux学习漫谈

武汉嵌入式培训:FPGA的嵌入式系统

达内荣获“全国IT职业教育信息化教学联盟理事单位”殊荣

选择城市和中心
贵州省

广西省

海南省