redis系列--事务
Posted wangdan1030
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,他们可以自己发生错误进行事务回滚,所以我们需要谨慎的使用它的持久化机制,尽量保证数据不丢失。
以上是关于redis系列--事务的主要内容,如果未能解决你的问题,请参考以下文章