zoukankan      html  css  js  c++  java
  • redis脚本

    redis脚本使用lua解释器来执行脚本,redis2.6版本通过内嵌支持lua环境,执行脚本的常用命令为eval

    eval命令

    语法:eval script numkeys key  [key ...] arg [ arg ...]

    实例:

    script:参数是一段脚本程序,脚本不必(也不应该)定义为一个Lua函数。

    numberkeys:用于指定键名参数的个数。

    key【key...】 :从eval的第三个参数开始算起,表示在脚本中所用的到那些redis键(key),这些键名参数可以在Lua中通过全局变量keys数组,用1位基址的形式访问(keys[1],keys[2])

    arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

    1 127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2],ARGV[3]}" 3 shi zhang yang 23 21 20
    2 1) "shi"
    3 2) "zhang"
    4 3) "yang"
    5 4) "23"
    6 5) "21"
    7 6) "20"
    View Code

    evalsha命令

    evalsha命令根据给定的sha1校验码,执行缓存在服务器中的脚本。

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

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

    evalsha命令基本语法: evalsha  sha1  numkeys  key [key...]  arg[arg ...]

    sha1:通过SCRIPT LOAD 生成的sha1校验码。

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

    arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。

    实例:

    1 127.0.0.1:6379> script load "return 'hello moto'"
    2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
    3 127.0.0.1:6379> evalsha "232fd51614574cf0867b83d384a5e898cfd24e5a" 0 
    4 "hello moto"
    View Code

    Script Exists 命令

    Script Exists命令用于校验指定的脚本是否已经被保存在缓存当中。

    基本语法: evalsha  sha1  numkeys  key[key...]  arg [arg...]

    返回值:一个列表,包含0和1,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面了。

    列表中的元素和给定的SHA1校验和保持对应关系,比如列表的第三个元素的值就表示第三个SHA1校验和指定脚本在缓存中的状态。

    实例:

    1 127.0.0.1:6379> script load "return 'hello moto'"  #SHA1校验码
    2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
    3 127.0.0.1:6379> script exists  232fd51614574cf0867b83d384a5e898cfd24e5a  #查看校验码是否存在
    4 1) (integer) 1   #1表示存在
    5 127.0.0.1:6379> script flush#清空缓存
    6 OK
    7 127.0.0.1:6379> script exists  
    8 232fd51614574cf0867b83d384a5e898cfd24e5a#再次查看缓存,0表示不存在
    9 1) (integer) 0
    View Code

    Script Flush 命令

    该命令用于清楚所有LUA脚本缓存。

    基本语法: Script Flush

    返回值:总是返回OK

    实例:

    1 127.0.0.1:6379> script load "return 'hello moto'"
    2 "232fd51614574cf0867b83d384a5e898cfd24e5a"
    3 127.0.0.1:6379> script exists 232fd51614574cf0867b83d384a5e898cfd24e5a
    4 1) (integer) 1
    5 127.0.0.1:6379> script flush###清楚脚本缓存
    6 OK
    7 127.0.0.1:6379> script exists 232fd51614574cf0867b83d384a5e898cfd24e5a
    8 1) (integer) 0
    View Code

    Script kill命令

    Script kill命令用于杀死当前正在运行的Lua脚本,当且仅当这个脚本没有执行过任何操作时,这个命令才生效。

    这个命令主要用于终止运行时间过长的脚本,比如一个bug而发生无限循环的脚本。

    script kill执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从eval命令的阻塞当中退出,并收到一个错误作为返回值。

    基本命令:script  kill

    返回值:script kill

    实例:

     1 redis 127.0.0.1:6379> SCRIPT KILL 2 OK 

    Script load  script命令

    该命令用于将脚本script添加到脚本缓存中,但并不执行这个脚本。

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

    如果给定的脚本已经在缓存里面了,那么不执行任何操作。

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

    脚本可以在缓存中保留无限长的时间,知道执行script flush为止。

    基本语法:script  load  script

    返回值:给定脚本的SHA1校验和。

    实例:

    1 127.0.0.1:6379> script load "return 1"
    2 "e0e1f9fabfc9d4800c877a703b823ac0578ff8db"
  • 相关阅读:
    思念
    Matlab与C++混合编程,添加OpenCV库
    重新启用此博客
    将博客搬至CSDN
    unity探索者之ILRuntime代码热更新
    unity探索者之UGUI圆形图片组件
    unity探索者之UGUI图片描边
    unity探索者之iOS微信登录、分享
    unity探索者之复制内容到剪贴板
    unity探索者之获取设备当前电量
  • 原文地址:https://www.cnblogs.com/sd880413/p/8253541.html
Copyright © 2011-2022 走看看