我是靠谱客的博主 怕黑哈密瓜,最近开发中收集的这篇文章主要介绍Redis(六)Script原子性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Redis从2.6.0开始,可以使用命令EVALEVALSHA执行Lua脚本。
脚本命令

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

比如

   EVAL "return {KEYS[1], KEYS[2], ARGV[1], ARGV[2], ARGV[3]}" 2 key1 key2 a1 a2 a3
  • 双引号"…"的内容就是Lua脚本,
  • 2就是key的数量,指后面key1, key2,剩下a1, a2, a3就可以用ARGV[n]来表示
    注意
    Lua中索引从1开始,所以第1个是KEYS[1]或ARGV[1],KEYS和ARGV是Lua的全局变量在脚本中可以直接使用
    上面的命令会返回
1) "key1"
2) "key2"
3) "a1"
4) "a2"
5) "a3"

如果EVAL中的脚本要执行Redis命令,可以使用

  • redis.call()
  • redis.pcall()

比如需要在脚本中执行Redis命令

>EVAL "return redis.call('set', 'foo', 'value1')" 0
OK

在Redis中脚本使用的规则,如果脚本中如果执行Redis命令,像上面设置key foo值为value value1,则是建议把key放在EVAL命令的key中传进去,像这样

>EVAL "return redis.call('set', KEYS[1], 'value1')" 1 foo
OK

这样的好处是,Redis可以根据foo判断key是在集群中不同的节点去执行。

原子性

Redis对EVAL执行脚本是保证原子性的,这跟MULTI / EXEC是相似的,这就意味着脚本没执行完之前,其他客户端的命令或者脚本都是不能执行的,不过,脚本也不是没缺点的,如果脚本里产生死循环或其他情况,那将是致命的。

最后

以上就是怕黑哈密瓜为你收集整理的Redis(六)Script原子性的全部内容,希望文章能够帮你解决Redis(六)Script原子性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部