C++Redis事务

一.选用Redis-Cli执行工作

 3.示例

   1.事务被科学履行

 C++ 1

   
 从上边实例中能够见见multi命令是敞开了业务,在此命令之后向redis添加多少时都不会直接存储,知道境遇exec命令。

   2.政工中现身破产的授命

C++ 2

从地点代码看出第叁条命令退步了,不过它并从未影响其余命令的履行,这点也是Redis的事务与关周到据库中的事务最为重庆大学的距离

3.回滚事务

C++ 3

 
上边代码大家先将键”a”的值设为了“a”,然后在工作上将“a”的值改为了,最终回滚事务,大家发现实价值并不曾改观。

 

Watch命令

沃特ch命令-监听3个(或多个)Key,尽管在事情执行此前这么些(或那一个)被别的命令所改变,那么事务将被打断。

 例:

C++ 4

 
从地点大家得以发现一开大家将键“a”的值设为“b”,然后去监听键“a”,然后再将该“a“的值改为“b”,最后执行工作大家发现事情执行破产,

C++ 5

此次代码大家做出了千篇一律的操作,只不过再监听之后到实施工作以前并从未修改键”a“的值,大家发现实价值在作业中期维修改成功

 二。使用c#代码处管事人务

假诺使用C#处理Redis就必须使用”servicestack.redis“得类库包,这些类库包4.0本子以上为收费版本,每日有读取限制,所以在运用时行使4.0本子以下的本子。

上面我们就使用c#来处理Redis事务

第壹创立RedisClient对象

RedisClient client = new RedisClient("127.0.0.1", 6379);  //Redis服务端的IP地址与端口号

  using (var tran = client.CreateTransaction())
            {
                try
                {
                    //执行事务命令(切记,每次命令只能执行一条语句)
                    tran.QueueCommand(y =>
                    {
                          y.Set("a", "a");  

                     });
                    tran.QueueCommand(y =>
                    {
                        y.Set("b", "b");

                    });
                    //提交事务
                    tran.Commit();
                }
                catch (Exception ew)
                {
                    Console.WriteLine(ew.Message);
                    //回滚事务
                    tran.Rollback();
                }
            }

        }

接下来选拔RedisClient的CreateTransaction方法成立工作,然后利用QueueCommand执行命令,那个命令每回只好执行一条语句,最终执行Commit主意提交,假诺出现很是,则利用Rollback艺术回滚事务

  1.概念

和别的数据库一样,Redis作为NoSQL数据库也一样提供了业务机制。在Redis中,MULIT,EXEC,DISCA路虎极光D,WATCH那个八个指令是落到实处工作的内核,Redis广东中华工程集团作的落实特征

   
1.在作业中的全部命令都将被串行化的一一执行,事务执行时期,Redis不会再为其余客户端的伏乞提供任何服务,从而保险了事情中的全体命令被原子的实践

   
2.和关系型数据库云南中华工程公司作相比较,在Redis事务中只要由某一条命令执行破产,其后的一声令下照旧会被继续执行

    3.得以经过MULTI命令开启一个事情,其能够知晓为关系性数据库中的“BEGIN
TRANSACTION”语句。在该语句之后执行的下令都被视为事务之内的操作,最终我们得以经过执行EXEC或DISCA昂科拉D命令来交给或回滚事务内的全数操作。那四个语句也可分晓为关系型数据库中的COMMIT和ROLLBACK语句

   
4.在拉开事务在此以前,尽管客户端与服务端之间出现通信故障并招致互联网断开,其后全数待执行的口舌都将不会棉被和衣服务器执行,但是一旦网络中断时间是发出在客户端执行EXEC命令之后,那么该工作中的全体命令都会棉被和衣服务器执行

   
5.霎时用Append-Only形式时,Redis会通过调用系统函数Write将该工作内的享有写操作在本次调用中全体写入磁盘,不过要是在写入的长河中发出系统崩溃,那么此时大概唯有部分数据被写入磁盘,而除此以外一些多少已经不见,Redis服务器在重复运行时执行一多元必须的一致性检查和测试,一旦发生看似难点,就会应声退出并交给相应的荒谬提醒。此时一旦充裕利用Redis工具包中提供的redis-check-aof工具,该工具客户援助稳定到多少不雷同的失实,并将已经写入的局部开始展览回滚。修复后就足以另行重新启航Redis服务器了。

Redis事务是从2.6.5版本开头才有的。2.6.5版本在此之前是从未事情

2.有关命令列表

命令原型 时间复杂度 命令描述 返回值
MULTI   用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行EXEC时,这些命令才会被原子的执行。 始终返回OK
EXEC   执行在一个事务内命令队列中的所有命令,同时将当前连接的状态恢复为正常状态,即非事务状态。如果在事务中执行了WATCH命令,那么只有当WATCH所监控的Keys没有被修改的前提下,EXEC命令才能执行事务队列中的所有命令,否则EXEC将放弃当前事务中的所有命令。 原子性的返回事务中各条命令的返回结果。如果在事务中使用了WATCH,一旦事务被放弃,EXEC将返回NULL-multi-bulk回复。
DISCARD   回滚事务队列中的所有命令,同时再将当前连接的状态恢复为正常状态,即非事务状态。如果WATCH命令被使用,该命令将UNWATCH所有的Keys。 始终返回OK。
WATCH key [key …] O(1) 在MULTI命令执行之前,可以指定待监控的Keys,然而在执行EXEC之前,如果被监控的Keys发生修改,EXEC将放弃执行该事务队列中的所有命令。 始终返回OK。
UNWATCH O(1) 取消当前事务中指定监控的Keys,如果执行了EXEC或DISCARD命令,则无需再手工执行该命令了,因为在此之后,事务中所有被监控的Keys都将自动取消。 始终返回OK。