欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

缓存中间件-redis的lua脚本都有哪些及其执行过程

程序员文章站 2022-04-05 18:58:12
...

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

redis主要的lua脚本命令有:

1. eval: 执行脚本(前面已经介绍过,先封装成f_sha,然后执行)
	1> 封装函数f_sha
	2> 将脚本加入到lua_scripts_dict中
	3> 设置超时钩子
	4> 执行脚本
	5> 移除超时钩子
	6> 返回结果
2. evalsha:根据sha校验和执行脚本
3. script load:加载脚本(eval的前两步)
4. script exists:根据sha判断脚本是否存在
5. script flush:清除原有脚本并创建新的字典(lua_scripts_dict)
6. script kill(shutdown nosave):结束脚本进程
	如果前面没有写操作,则直接script kill
	如果前面有写操作,为了消除写操作的影响,执行shutdown nosave

lua脚本执行过程如图:

缓存中间件-redis的lua脚本都有哪些及其执行过程

对于集群中的主从复制,其他的脚本只要主服务器将脚本命令同步到从服务器即可,但是evalsha命令,有些特殊,如果对master没有同步到或还没同步到的从服务器执行evalsha命令,可能会出现不存在的情况,因为对应的f_sha脚本函数还没有同步到从服务器上,
对此设置了一个repl_scriptcache_dict通过sha来记录是否已将该sha对应的函数同步到了所有的从服务器上,如果全部从服务器都同步了,会将对应的sha存储到repl_scriptcache_dict,否则不会存进去,所以可以根据这个来判断lua脚本的同步情况,并且对于没有同步的从服务器,如果找不到sha,则会执行eval命令来代替evalsha,保证命令的顺利执行。

更多消息,关注公众号:
缓存中间件-redis的lua脚本都有哪些及其执行过程

相关标签: 中间件