八:事务

1.Redis 的事务(批处理)

  可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令多会序列化,,按照顺序的串行执行二不会被其他命令插入,不许加塞(相当于一次性赞这一些命令,然后一次运行,一起成功一起失败)

2.能干嘛

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

3.操作方式(在开启事物的时候就会记录你的操作,然后在你触发事物的时候就会一直运行你的操作)

  3.1 multi:开启事物

  3.2 exec:触发事物

  3.3 discard :取消事物

  3.4 unwatch: 取消watch命令对所有key的监视

  3.5 watch :监视一个或多个key

4.全体连坐

  当在打开始事物时,输入命令,但是输入命令的时候发生了非常严重的错误,那么事物中所有的命令将不会被执行。

5.冤头债主

  当在打开事物时,输入的命令没有发生错误但是运行的时候会发生错误,比如自加1在执行的时候没报错,是在运行的时候报错,那么就不会影响其他人

6.watch监控:

   1.乐观锁(每次拿数据的时候都认为别人不会去修改,所以不会上锁,但是在放回数据的时候会对比版本号的机制,确保多个人修改时不出现问题,可以保持大并发,工作常用),悲观锁(认为自己每次去拿数据的时候别都会修改,所以在拿到数据后会把整张表锁住知道我修改完,解锁后),CAS(check and set)

   2.watch在使用的时候,可以监控一个key当这个key在该次事件中没有被unwatch(exec会有unwatch的效果)时就会一直监控这个key,当这个key在别的地方,非该次事件中的地方修改那么此次的事件里的所有内容将执行失败。

  

事物的3阶段:

    1.开启:mulit

    2.入队:多个命令入队到事物中,接到这些命令并不会立即执行,而是放到等待执行的事物队列里面

    3.执行:有exec命令触发事物

事物的3特性

    1.单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。没有隔离级别的概念:队列中的爺令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,

    2.也就不存在"事务内的查询要看到事务里的更新,在事务外查询不能看到"这个让人万分头痛的问题

    3.不保证原子性: redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

原文地址:https://www.cnblogs.com/BookMiki/p/14002256.html