zoukankan      html  css  js  c++  java
  • Redis的事务

    Redis的事务

    1、redis的事务是什么?

    • 可以一次执行多个命令,批处理,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞

    2、redis的事务能做什么?

    • 一个队列中,一次性、顺序行、排他性的执行一系列命令

    3、redis事务可以一次执行多个命令,并且带有一下三个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    4、一个事务从开始到执行会经历一下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

    5、redis事务常用的命令

    6、实例

    • 以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

      [root@node01 redis-3.0.4]# redis-cli
      127.0.0.1:6379> MULTI
      OK
      127.0.0.1:6379> SET name "guhaohao"
      QUEUED
      127.0.0.1:6379> get name
      QUEUED
      127.0.0.1:6379> sadd habbit "python" "Java"
      QUEUED
      127.0.0.1:6379> SMEMBERS habbit
      QUEUED
      127.0.0.1:6379> EXEC
      1) OK
      2) "guhaohao"
      3) (integer) 2
      4) 1) "python"
         2) "Java"
      
    • 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

    • 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    • 比如:

      127.0.0.1:6379> MULTI
      OK
      127.0.0.1:6379> SET a a
      QUEUED
      127.0.0.1:6379> SET b b
      QUEUED
      127.0.0.1:6379> SET c c
      QUEUED
      127.0.0.1:6379> EXEC
      1) OK
      2) OK
      3) OK
      
      
      如果在 set b b 处失败,set a 已成功不会回滚,set c 还会继续执行
      
  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/ghh520/p/13227579.html
Copyright © 2011-2022 走看看