zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7106406.html
Copyright © 2011-2022 走看看