redis-原子性

Redis有哪些操作方式可以保证原子性?若上层用多线程,而Redis的操作是多种操作,怎么保证多个操作的原子性呢?[面试7.0]

原生的原子命令:
INCR/DECR,这两个操作是将读,自增(自减),写作为一个原子进行执行的,单线程保证了原子性
单机锁或分布式锁:
锁是常用来保证原子性的
事务监听:
每个客户端监听这个key,事务更新后发现key被修改就拒绝再执行
原理: Redis会维护一个事务队列,当一个客户端执行完后,会从队列剔除该客户端,并将其他客户端标记为客户端脏数据状态(即标记为CLIENT_DIRTY_CAS),这样客户端监听时会对这种状态拒绝执行,从而保证了只有单个客户端执行成功(原子性)
lua脚本:
redis将lua脚本作为一个整体执行,执行时不会被其他命令打断,不存在竞态问题来保证原子执行的

怎么理解Redis事务?[面试7.0]

Redis事务分为开启,命令入队,执行三个步骤
开启: 开启事务
命令入队: 将待执行命令放入事务队列
执行: 要么全部执行,要么全部不执行
注意: Redis事务保证是否执行,但不保证是否单个队列元素命令是否执行成功,即Redis事务不保证整个事务的原子性,但保证单个元素命令执行的原子性,一般情况下Redis只有在错误语法时,单条命令才会失败

Redis+Lua脚本是怎样保证原子性的?[面试7.0]

Redis的Lua脚本是将命令聚合一个来执行,若客户端将命令发到服务端执行,发送成功后只要没有语法错误,服务端能保证所有命令都执行,但如果脚本中某条命令有语法错误,也是不能保证整个命令的原子操作的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023年Java面试宝典

您的鼓励是对我的肯定,共建希望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值