zoukankan      html  css  js  c++  java
  • Redis 的 Lua 脚本支持

    Redis 2.6.0 内置的Lua Script支持,可以在Redis的Server端一次运行大量逻辑。

    • 整个Script默认是在一个事务里的。
    • Script里涉及的所有Key尽量用变量,从外面传入,使Redis一开始就知道你要改变哪些key。
    • EVAL每次传输一整段Script比较费带宽,可以先用SCRIPT LOAD载入script,返回哈希值。然后用EVALHASH执行。
    • 内置的LUA库里还很贴心的带了CJSON,可以处理JSON字符串。

    参考:http://www.searchdatabase.com.cn/showcontent_70423.htm

    redis中执行lua的命令用eval、evalsha、 script load

    http://redis.readthedocs.org/en/latest/script/index.html

    Redis 的 EVAL 命令 参数说明如下:


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

    script 参数是一段 Lua 5.1 脚本程序,它会被运行在 Redis 服务器上下文中,这段脚本不必(也不应该)定义为一个 Lua 函数。

    numkeys 参数用于指定键名参数的个数。

    键名参数 key [key ...] 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。

    在命令的最后,那些不是键名参数的附加参数 arg [arg ...] ,可以在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

    上面这几段长长的说明可以用一个简单的例子来概括:

    > eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
    1) "key1"
    2) "key2"
    3) "first"
    4) "second"

    其中 "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 是被求值的 Lua 脚本,数字 2 指定了键名参数的数量, key1 和 key2 是键名参数,分别使用 KEYS[1] 和 KEYS[2] 访问,而最后的 first 和 second 则是附加参数,可以通过 ARGV[1] 和 ARGV[2] 访问它们。

    参考:http://redis.readthedocs.org/en/latest/script/eval.html

    SCRIPT LOAD script

    将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

    EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。

    如果给定的脚本已经在缓存里面了,那么不做动作。

    在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。

    脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。

    redis> SCRIPT LOAD "return 'hello moto'"
    "232fd51614574cf0867b83d384a5e898cfd24e5a"
    
    redis> EVALSHA 232fd51614574cf0867b83d384a5e898cfd24e5a 0
    "hello moto"

     

    EVALSHA sha1 numkeys key [key ...] arg [arg ...]

    根据给定的 sha1 校验码,对缓存在服务器中的脚本进行求值。

    将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。

    这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样。

  • 相关阅读:
    前端学习(21)~css学习:如何让一个元素水平垂直居中?
    前端学习(20)~css布局(十三)
    前端学习(19)~css3属性(十二):Flex布局图片详解
    前端学习(18)~css3属性学习(十一):动画详解
    前端学习(16)~css3属性学习(十)
    蓝桥---大臣的旅费(求树的直径)
    蓝桥---乘积最大(区间dp、数据水的话long long,暴力就能过)
    蓝桥---错误票据(注意输入)
    蓝桥---带分数(全排列)
    蓝桥---传球游戏(dp)
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4298206.html
Copyright © 2011-2022 走看看