lua
Redis在2.6版引入了对Lua的支持
- 使用Lua可以非常明显的提升Redis的效率。
- 只要脚本所对应的函数曾经在 Lua 里面定义过, 那么即使用户不知道脚本的内容本身, 也可以直接通过脚本的 SHA1 校验和来调用脚本所对应的函数, 从而达到执行脚本的目的 —— 这就是 EVALSHA 命令的实现原理
- 当 Lua 脚本里本身有调用 Redis 命令时(执行
redis.call
或者redis.pcall
), Redis 和 Lua 脚本之间的数据交互会更复杂一些。
redis pipeline
pipeline引入,降低了多次命令-应答之间的网络交换次数,并不能缩小redis对每个命令的处理时间
什么时候使用pipeline,什么时候使用lua
- 当多个redis命令之间没有依赖、顺序关系(例如第二条命令依赖第一条命令的结果)时,建议使用pipline;
- 如果命令之间有依赖或顺序关系时,pipline就无法使用,此时可以考虑才用lua脚本的方式来使用。
redis执行lua脚本好处
- 减少网络开销,本来多次网络请求的操作,可以用一个请求完成,原来多次请求的逻辑均放在redis服务器上完成。使用lua,减少了网络往返时延;
- 原子操作:redis会将整个脚本作为一个整体执行,不会被其他命令插入。
- 复用:客户端发送的脚本会永久存储在redis中,意味着其他客户端可以复用这一脚本而无需使用代码完成同样逻辑。
网友评论