为你自己学Redis
  • README
  • 安装
    • macos下安装redis
  • 第1章 构建Redis开发环境
    • 1.1 Redis概述
    • 1.2 了解必要的Docker技能
    • 1.3 安装和配置基于Docker的Redis环境
  • 第2章 实践Redis的基本数据类型
    • 2.1 Redis缓存初体验
    • 2.2 针对字符串的命令
    • 2.3 针对哈希类型变量的命令
    • 2.4 针对列表类型变量的命令
    • 2.5 针对集合的命令
    • 2.6 针对有序集合的命令
  • 第3章 实践Redis的常用命令
    • 3.1 键操作命令
    • 3.2 HyperLogLog相关命令
    • 3.3 lua脚本相关命令
    • 3.4 排序相关命令
  • 第4章 实践Redis服务器和客户端的操作
    • 4.1 Redis服务器管理客户端的命令
    • 4.2 查看Redis服务器的详细信息
    • 4.3 查看并修改服务器的常用配置
    • 4.4 多个客户端连接远端服务器
  • 第5章 Redis数据库操作实战
    • 5.1 切换数据库操作
    • 5.2 Redis事务操作
    • 5.3 地理位置相关操作
    • 5.4 位图数据类型的应用
    • 5.5 慢查询实战分析
  • 第6章 Redis数据持久化操作
    • 6.1 Redis持久化机制概述
    • 6.2 AOF持久化机制实战
    • 6.3 RDB持久化机制实战
    • 6.4 如何选用持久化方式
  • 第7章 搭建Redis集群
    • 7.1 搭建基于主从复制模式的集群
    • 7.2 搭建哨兵模式的集群
    • 7.3 搭建cluster集群
  • 第8章 GO整合MySQL与Redis
    • 8.1 GO通过redigo读写Redis
    • 8.2 Go与各种Redis数据类型
    • 8.3 Redis与MySQL的整合
    • 8.4 Redis缓存实战分析
  • 第9章 Redis应用场景与案例实现
    • 9.1 Redis消息队列实战
    • 9.2 Go实战Redis分布式锁
Powered by GitBook
On this page
  • 3.3.1 把lua脚本装载到缓存里
  • 3.3.2 通过EVALSHA命令执行缓存中的脚本
  • 3.3.3 清空缓存中lua脚本的命令
  • 3.3.4 用EVAL命令执行LUA脚本
  1. 第3章 实践Redis的常用命令

3.3 lua脚本相关命令

3.3.1 把lua脚本装载到缓存里

  • SCRIPT LOAD

    • 语法:SCRIPT LOAD script

    • 将脚本script添加到脚本缓存中,但并不立即执行这个脚本.该命令返回给定脚本的SHA1校验和

例:

装载脚本:

127.0.0.1:6379> SCRIPT LOAD 'return 1 + 2'
"e412f6a7f0b07176d9824bb91205d9d54e88fdc0"
  • SCRIPT EXISTS

    • 语法:SCRIPT EXISTS script [script ...]

    • 功能:校验指定的脚本是否已经被保存在缓存当中.返回值为一个列表,1表示脚本存在,0表示脚本不存在.列表中的元素和给定的SHA1校验和保持对应关系

例:

装载脚本:

127.0.0.1:6379> SCRIPT LOAD 'return 3 + 4'
"838b9ce712555508c95330c46ab526d2b01f4d5f"

根据校验和确认脚本是否存在:

127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0 838b9ce712555508c95330c46ab526d2b01f4d5f abc123
1) (integer) 1
2) (integer) 1
3) (integer) 0

可以看到,由于不存在校验和为abc123的脚本,因此对于该校验和的返回值为0

3.3.2 通过EVALSHA命令执行缓存中的脚本

  • EVALSHA

    • 语法:EVALSHA sha1 numkeys key [key ...] arg [arg ...].其中:

      • sha1:脚本的sha1校验和

      • numkeys:参数个数

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

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

    • 功能:根据给定的sha1校验码,执行缓存在服务器中的脚本

例:执行上文加载的return 1 + 2

127.0.0.1:6379> EVALSHA e412f6a7f0b07176d9824bb91205d9d54e88fdc0 0
(integer) 3

3.3.3 清空缓存中lua脚本的命令

  • SCRIPT FLUSH

    • 语法:SCRIPT FLUSH

    • 功能:清除所有Lua脚本缓存.该命令总是返回OK

确认脚本是否存在:

127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0
1) (integer) 1
127.0.0.1:6379> SCRIPT EXISTS 838b9ce712555508c95330c46ab526d2b01f4d5f
1) (integer) 1

清空所有脚本:

127.0.0.1:6379> SCRIPT FLUSH
OK

确认脚本是否存在:

127.0.0.1:6379> SCRIPT EXISTS e412f6a7f0b07176d9824bb91205d9d54e88fdc0
1) (integer) 0
127.0.0.1:6379> SCRIPT EXISTS 838b9ce712555508c95330c46ab526d2b01f4d5f
1) (integer) 0

可以看到,脚本已经被清空了

3.3.4 用EVAL命令执行LUA脚本

  • EVAL

    • 语法:EVAL script numkeys key [key ...] arg [arg ...].其中:

      • numkeys:参数个数

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

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

    • 功能:直接运行脚本

例:

运行一段LUA脚本,该脚本接收1个Redis键名和1个参数.

127.0.0.1:6379> EVAL "return { KEYS[1], ARGV[1] }" 1 name 'Peter'
1) "name"
2) "Peter"
  • SCRIPT KILL

    • 语法:SCRIPT KILL

    • 功能:杀死当前正在运行的LUA脚本.当且仅当这个脚本没有执行过任何写操作时,这个命令才生效,该命令执行后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从EVAL命令的阻塞当中退出,并收到一个错误作为返回值.

例:在没有LUA脚本正在运行时执行SCRIPT KILL

127.0.0.1:6379> SCRIPT KILL
(error) NOTBUSY No scripts in execution right now.
Previous3.2 HyperLogLog相关命令Next3.4 排序相关命令

Last updated 1 year ago