1、事务的特性
1.1、概念:在Redis中,事务的本质是一组命令的集合,一个事务中所有的命令都会被序列化,在事务执行过程中,会按照顺序串行执行队列的命令,而且不会被其他的命令插入。
1.2、从概念中可以做出如下总结:
- 一次性
- 顺序性
- 排他性
1.3、Redis事务没有隔离级别(这是与关系型数据库不同的地方)
批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。
所有命令在事务中,并没有直接执行,只有发起执行命令的时候才会执行
Redis单条命令保证原子性,但是事务不保证原子性,而且没有回滚(如果一个redis事务中有命令执行失败,那么其他命令依然会继续执行)
2、Redis事务的开启
- 开启事务(multi)
- 命令入队(redis的基本操作命令)
- 执行事务(exec 【一旦执行exec后,之前加的监控锁都会被取消】)
- discard(取消事务,放弃事务中的所有命令)
- watch key1 key2 … : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
- unwatch : 取消watch对所有key的监控
多数事务失败是由语法错误或者数据结构类型错误导致的,语法错误说明在命令入队前就进行检测的,而类型错误是在执行时检测的,Redis为提升性能而采用这种简单的事务,这是不同于关系型数据库的,特别要注意区分。