抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文介绍了Redis的脚本。

环境

Windows 10 企业版 LTSC 21H2
Redis 7.4.8

1 概述

Redis的脚本是使用Lua语言编写的脚本,它可以在服务器执行,实现复杂的业务逻辑。

脚本可以原子性地执行多个命令,避免网络往返时间,提高执行效率。

2 特点

脚本特点:

  • 原子性:脚本中的所有命令会原子性地执行,执行期间其他客户端的命令会被阻塞,避免竞态条件。
  • 降低网络开销:将多个命令封装在一个脚本中,减少网络通信的次数,提高执行效率。
  • 超时机制:脚本执行时间过长会被服务器终止,默认超时时间为5秒。
  • 缓存机制:服务器会缓存脚本,避免重复编译脚本。

3 原理

工作原理:

  1. 客户端将脚本发送给服务器。
  2. 服务器编译脚本并缓存。
  3. 服务器原子性地执行脚本中的所有命令。
  4. 服务器返回脚本执行的结果。

4 使用

命令:

  • EVAL 脚本内容 键名数量 键名 参数:执行脚本,通过脚本内容执行脚本。
  • EVALSHA 脚本SHA1哈希值 键名数量 键名 参数:通过脚本的SHA1哈希值执行脚本,节省代码长度,但是需要缓存脚本。
  • SCRIPT LOAD:加载脚本到缓存。
  • SCRIPT EXISTS:检查脚本是否在缓存中。
  • SCRIPT FLUSH:清空脚本缓存。
  • SCRIPT KILL:终止正在执行的脚本。

在脚本中调用Redis执行命令:

  • redis.call():调用Redis命令,遇到错误时抛出异常,脚本立即终止。
  • redis.pcall():调用Redis命令,遇到错误时捕获错误,返回包含错误信息的Lua表格,脚本继续执行。

示例:

cmd
1
2
3
4
5
127.0.0.1:6379> EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 user 张三
OK
127.0.0.1:6379> GET user
张三
127.0.0.1:6379>

评论