• redis中的事务(版本2.6.16)


    一.命令支持

    1.multi
    开始事务

    2.exec
    事务提交


    3.取消事务
    discard

    二.事务示例

    1.示例

    redis>set key1 20
    OK
    redis>mutil
    OK
    redis>get key1
    QUEUED
    redis>incr key1
    QUEUED
    redis>exec
    1)"20"
    2)(integer)"21"


    2.redis中的事务算是非常简单的,它将一组命令放入队列;即便要取值,也会将该命令放入队列.等到exec时候,再用for循环,将命令全部写入,如果其中一条命令执行错误,则放弃全部命令的写入.


    三.并发控制(乐观锁)

    设想一个场景,client1拿到了key1后,做了一系列其他操作,在此期间client2对key1加1;client1最后也对key1加1;理论上应该是key1加2,但实际上key1只是加了1;这就是并发产生的问题,redis提供了基于watch命令的乐观锁来防止这一问题产生.

    1.基本命令
    a.watch key1 ... keyN
    监控某个key

    b.unwatch
    取消监控

    *watch必须和mutil...exec配合使用,单独使用并不起作用.watch监控一个key,之后mutil...exec执行一组语句,如果在此期间,有另一个client更改了watch监控的key对应的值,则exec执行返回nil,整组命令不会提交.

    2.示例

    A.client1

    a.redis>watch key1
    b.redis>multi
    c.redis>incr key1
    d.redis>exec

    B.client2
    在client1执行到c这一步时,client2也执行incr key1;client1执行exec时,发现watch的key1有改变,则放弃整个事务写入,返回nil

  • 相关阅读:
    leetcode 34 rust
    leetcode 2 rust
    leetcode 1 rust
    leetcode 20 rust
    leetcode 287 rust
    leetcode 18 rust
    lottery抽奖
    webpack
    webpack(7)-生产环境
    webpack(6)-模块热替代&tree shaking
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7106406.html
Copyright © 2020-2023  润新知