Redis的事务之watch使用

来源:互联网 发布:非结构化数据 编辑:程序博客网 时间:2024/06/05 23:52

      斗转星移,兜兜转转留下旅行的足迹。

      redis,在软件行业可以是家喻户晓的红人,晚于memcached,青出于蓝而胜于蓝,可以用作缓存还可以做数据库。最近做的项目用到redis存储一些交互的数据,从此对你更情有独钟。

      redis支持简单的事务,redis的事物需要watch配合。

      一.事务

      说起事务这个名词,相信大家不陌生。事务,从字面上可以清楚地理解,指的是要做的或所做的事情,是一个整体的概念。由前面的理解我们可以知道,要做的或所做的事情要不是做了要不是没做,转移焦距到本文说的事务,类似地要么做完要么不做,没有做了一半的这样可以保证整体的含义。

      事务,保证了原子性/一致性/隔离性/永久性。简单地说,生活中的例子:张三需要向李四账户转1000元钱,按照正常的情况来说,先从张三账户减1000元然后在李四账户加1000元。如果在转账的过程中出现意外的情况,比如说断掉电等,把张三的钱减掉之后李四的账户并没有加钱,这样是不合理的,应该保持一致;从代码的角度来说:一个方法中的有delete/有insert,要保证这两个方法要不都执行要不都不执行才是完整的。

     二.redis的事务

      知识之间是相通的,mysql中有事务,redis的事务跟它类似。只是,相对来说redis支持的事务比较简单。说它简单是因为在事务执行过程中如果不出现语法上的错误,事务中的一个操作执行失败而另一个操作时可以执行成功的。

     三.redis事务之watch

     首先要了解redis事务中watch的作用,watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)。假设我们通过watch命令在事务执行之前监控了多个Keys,倘若在watch之后有任何Key的值发生了变化,exec命令执行的事务都将被放弃,同时返回Null multi-bulk应答以通知调用者事务执行失败。

      所以,需要注意的是watch监控键之后,再去操作这些键,否则watch可能会起不到效果。

原创粉丝点击