面试官:Redis执行lua脚本能保证原子性吗?

核心问题

  • Redis执行lua脚本是否能确保原子性?

面试经历

  • 面试者在面试中自信回答Redis执行lua脚本能保证原子性,但未能深入解释原因。

原子性概念

  • 原子性:一个事务的所有命令要么全部执行成功,要么全部执行失败。

Redis官方说明

  • Redis在执行lua脚本期间,会阻塞所有客户端操作,确保不会有其他命令插入执行。
  • 官方定义中并未明确包含原子性。

实验验证

  1. 编写并执行一个简单的lua脚本,包括对变量a的赋值和对字符串b的加法运算。
  2. 预设Redis中key a的值为1。
  3. 执行lua脚本,脚本中对b进行加法运算时出现异常。
  4. 检查a的值,发现已更新为2,说明没有执行回滚操作。

结论

  • Redis执行lua脚本不能保证原子性。
  • lua脚本能保证在执行期间不会有其他客户端命令干扰,但不支持回滚。

Redis事务与lua脚本的比较

  • Redis事务:

    • 客户端发送MULTI命令后,每个命令请求被记录到事务队列。
    • 执行EXEC命令时,按顺序执行事务队列中的命令。
    • 每个命令都需要与Redis服务端进行交互,涉及多次网络IO操作。
  • lua脚本:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值