目录
一、引言
二、介绍
三、使用场景
四、如何使用
1.基本命令
2.Watch命令
五、总结
一、引言
在redis中也是存在事务的,对于某些事务操作的提交,本篇文章就redis的事务进行简单介绍!
二、介绍
Redis的事务比MySQL的事务要简单许多。
原子性:Redis的事务有没有原子性存在争议,Redis是存在这种机制的,能够实现要么全都执行,要么全都不执行,但是Redis无法保证事务全都执行成功。
一致性:Redis不具备一致性,没有回滚机制,事务执行过程中如果某个修改操作出现失败,就可能引起不一致的情况。
持久性:不具备持久性,Redis本身是一个内存数据库,数据是存储在内存中的,虽然Redis也有持久化机制(与事务没有什么关系),但是还是以内存为主。
隔离性:不涉及隔离性,Redis是一个单线程模型的服务器,所有的请求/事务,都是“串行”执行的。
三、使用场景
主要的意义是打包,避免其他客户端的命令插队到redis的中间
redis实现事务,是引入了一个队列,开启事务就会将命令发给服务器并放入这个队列中(并不会立即执行),遇到执行事务的命令之后才会按顺序进行执行。
四、如何使用
1.基本命令
开启事务:MULTI
执行事务:EXEC
放弃当前事务:DISCARD
2.Watch命令
用于监控某个key是否在事务执行之前,发生了改变。使用了之后,key就是事务外部更改的值
(watch必须搭配事务使用,并且必须在multi之前使用)
watch是如何实现的呢?
本质上是对exec增加了一个判定条件
类似于一个“乐观锁”,自认为产生锁冲突的概率比较低。
执行watch key的时候会给这个key安排一个“版本号”,只要其他客户端对这个key进行了修改,就会使版本号变大,当事务执行的时候(exec)判定当前的版本号和最初watch的时候记录的版本号是否一致?
如果一致,才会执行事务
如果不一致,说明key被其他客户端修改过了,因此此处就直接丢弃事务中的操作,exec返回nil
五、总结
redis的事务没有MySQL那么复杂,重点掌握watch方法的使用,下一篇文章将继续介绍redis的主从复制,感谢观看!