redis中为什么要用lua脚本语言来进行锁的释放
图片来自其他博客的截图
·
首先我的理解:lua脚本语言时C语言编写的嵌入式语言,当多个线程同时进来调用脚本时,只允许一个单独的线程去执行我们的脚本,执行完后其他的线程才能继续去执行,
在操作Redis时,假设有A,B两个线程,它们设置的锁都叫k1(对应的值不同),A线程执行15秒,B线程执行10秒,当A线程执行到10秒的时候假如A的业务执行完了,锁也过期了,A线程还在继续,这时候B线程来了,因为A的锁过期了,B当然可以设置锁去执行业务逻辑,但是B运行10秒,这时候A运行还剩5秒,在A运行剩下的5秒的最后,A执行释放锁,
那么问题来了,A会把B设置的K1给释放了,这时候B还没有执行完它的业务,所以需要用lua言语保证锁的释放的原子性。让A释放他自己的对应的锁而不是B的锁。![Lua脚本语言示例](https://img-blog.csdnimg.cn/82a813e862114127a8e0935712fd2277.jpeg#pic_center)
更多推荐
已为社区贡献1条内容
所有评论(0)