redis系列--事务

 一、redis事务说明:
        并发控制单位,是用户定义的一个操作系列,这些操作要么全做,要么一个都不做,当发生错误的时候会发生事务回滚。  redis对事务的支持目前还是比较简单地,只能保证一个client发起的事务中的命令可以连续的执行,而且中间不会插入其他client命令。
二、redis 事务操作:
       一个client在一个连接中发出multi命令,这是连接会进入一个事务上下文,后续命令会放入一个队列中等待执行,当执行exec命令是,redis开始顺序与执行队列中的所有命令。但是当队列中的一个命令发生错误的时候不会发生回滚,事务依旧会继续执行。采用discard命令取消事务。
三、乐观锁控制复杂事务
       基于数据版本的记录机制实现。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般通过为数据库表添加一个version的字段,来实现读取数据时,版本号也一起读出。的那个对字段更新的时候,版本号也加1.在提交数据的时候,将提交数据的版本号与数据库表对应记录的当前版本号进行对比,如果提交的数据版本号大于数据库当前版本号,则可以提交,如果小于,将不能体检。此外还会用watch命令见识给定的key,当exec时候如果见识的key从调用watch后发生变化则整个事务会失败。也可以用watch多次监视多个key,这样就可以对指定的key加乐观锁了。watch在整个连接过程中都是有效的,在整个事务中也是有效的,如果断开会自动清除。
四、持久化机制
       redis支持持久化的内存数据库,也就是说redis需要经常把内存中的数据同步到硬盘中来保证持久化。有两种方式:snapshotting和aof方式。
      (1)快照方式是默认的持久化方式,这种方式将内存中的数据已快照的方式写入二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。但是存在一个缺陷,当redis当掉的话,最后一次快照就会丢失。

      (2)aof方式,会将每个收到的写命令t通过write函数追加到文件中,在redis重启的时候回写入到数据库中。避免了快照丢失。但是由于os会在内核中缓存write做的修改,可能会不理解写入到磁盘中,所以又可以丢失部分修改。面对这种情况我们可以通过配置文件告诉redis我们想通过fsync函数强制OS写入到磁盘。

五、总结
      redis数据库并不像我们常用的MySQL,他们可以自己发生错误进行事务回滚,所以我们需要谨慎的使用它的持久化机制,尽量保证数据不丢失。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值