事务
multi:组队阶段,不会执行
exec:执行
discard:放弃组队
错误处理:
组队阶段:有命令错误,都不会执行
执行阶段:错误的不成功,其他的成功,和MySQL的不一样
悲观锁
每次操作之前先上锁,操作之后释放锁
顾名思义,就是很悲观,每次去拿数据的时候,都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁写锁等,都是在操作之前先上锁,
乐观锁
数据版本号,每次操作之前先比较版本号,如果不一致,不能操作
每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用着用check-and-set机制实现事务的
watch:在执行multi之前,先执行watch key1 ...,可以监视key,如果在事务执行之前这个key被其他命令所改动,那么事务将被打断
unwatch
Redis事务三特性
单独的隔离操作:
事务中的所有命令都会序列化,按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
没有隔离级别的概念:
队列中的命令没有提交之前都不会实际被执行,因为事务提交前,指令都不会实际执行
不保证原子性:
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
组队阶段:有命令错误,都不会执行
执行阶段:错误的不成功,其他的成功,和MySQL的不一样