美文网首页django
Django-34 Redis-3 事务

Django-34 Redis-3 事务

作者: JuliusL | 来源:发表于2021-12-18 14:17 被阅读0次

    事务命令

    1、multi
    开启事务,类似mysql begin
    2、命令1
    3、命令2
    4-1、exec
    提交到数据库执行 mysql commit
    4-2、discard
    取消事务 mysql 'rollback'

    pipeline 流水线

    批量执行redis命令,减少通信IO
    原理:效仿redis事务,客户端将多个命令打包,一次通信发给redis,可明显降低redis服务的请求数
    注意:
    1,此为客户端技术
    2,如果一组命令中,一个命令需要上一个命令的执行结果才可以执行,则无法使用该技术

    import redis
    # 创建连接池并连接到redis
    pool = redis.ConnectionPool(host='127.0.0.1',db=0,port=6379)
    r = redis.Redis(connection_pool=pool)
    
    pipe = r.pipeline()
    pipe.set('fans',50)
    pipe.incr('fans')
    pipe.incrby('fans',100)
    pipe.execute()
    

    python 操作redis事务

    Python操作事务需要依赖流水线技术

    with r.pipeline(transaction=true) as pipe
      pipe.multi()
      pipe.incr('books')
      pipe.incr('books')
      values = pipe.execute()
    

    watch-乐观锁

    事务过程中,可对指定key进行监听,命令提交时,若被监听key对应的值未被修改,事务方可提交成功,否则失败
    解决资源竞争的一种方式

    > watch book
    OK
    > multi
    OK
    > incr books
    QUEUED
    > exec #事务执行失败
    (nil)
    
    watch之后,再开一个终端进入redis
    > incr books #修改book值
    (integer) 1
    
    

    相关文章

      网友评论

        本文标题:Django-34 Redis-3 事务

        本文链接:https://www.haomeiwen.com/subject/whhgfrtx.html