redis 事务,redis实现秒杀,悲观锁秒杀,乐观锁秒杀

本文探讨了Redis中的事务机制,包括MULTI、EXEC、DISCARD命令的使用,以及事务的ACID特性。同时,介绍了Redis的乐观锁(WATCH)如何实现秒杀场景下的超卖防护。此外,还提到了非事务性的管道(Pipeline)在处理多个操作时的效率优势,以及在秒杀场景中应用悲观锁和SETNX命令的可能性。
摘要由CSDN通过智能技术生成

事务
  • 操作

    # ex,过期时间(秒)
    # px,过期时间(毫秒)
    # nx,如果设置为True,则只有name不存在时,当前set操作才执行
    # xx,如果设置为True,则只有name存在时,当前set操作才执行
    redis_client.set('name', 'zs', ex=10)
    
    
  1. 事务:

    1. 语法:

      MULTI (multi):开启事务,后续的命令会被加入同一个事务中。 事务中的操作会发送给服务端,但是不会立即执行, 而是放到了该事务的对应的一个队列中,服务端返回QUEUED

      EXEC (exec):python文件引用中是execute,执行EXEC后,事务中的命令才会被执行,事务中的命令出现错误时,不会回滚也不会停止事务, 而是继续执行。

      DISCARD(discard):取消事务,事务队列会清空,客户端退出事务状态

    2. ACID:

      **原子性:**不支持。不会回滚并且继续执行

      **隔离性:**支持。事务中命令顺序执行,并且不会被其他客户端打断(先EXEC的先执行)。单机redis读写操作使用 单进程单线程

      **持久性:**不支持,因为redis数据容易丢失

      **一致性:**不支持。 强一致性要求,可以通过乐观锁(watch)来实现

    3. WATCH:

      • redis机制的乐观锁
      • 机制:事务开启前,设置对数的监听,EXEC时,如果发现数据发生过修改,事务会自动取消(DISCARD)。事务EXEC后,无论成败,监听会被移除。
    4. setnx和悲观锁

      • setnx键不存在,才会设置成功
    5. 非事务性管道

      • redis实现了管道机制,可以将多个操作打包发给redis服务器
      • 可以单独使用管道,不需要开启事务 对于没有事务要求的多个操作,可以直接使用非事务性管道进行处理,减少事务产生的性能消耗。
      • 创建非事务性管道,通过transaction=False参数设置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值