Redis 第5章 事务 第6章 redis消息订阅
1. 事务简介
- Redis中事务,不同于传统的关系型数据库中的事务。
- Redis中的事务指的是一个单独的隔离操作。
- Redis的事务中的所有命令都会序列化、按顺序地执行且不会被其他客户端发送来的命令请求所打断。
- Redis事务的主要作用是串联多个命令防止别的命令插队
2. 事务常用命令
MULTI |
标记一个事务块的开始 |
EXEC |
执行事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行 |
DISCARD |
刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。 如果已使用WATCH,DISCARD将释放所有被WATCH的key。 |
WATCH |
标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁) |
3. 事务的常见演示
3.1 简单组队
MULTI开启组队,EXEC依次执行队列中的命令。
DISCARD中途取消组队
3.2 组队失败
3.2.1 自作自受
此种情况,语法符合规范,Redis只有在执行中,才可以发现错误。而在Redis中,并没有回滚机制,因此错误的命令,无法执行,正确的命令会全部执行!
3.2.2 殃及池鱼
在编译的过程中,Redis检测出来了错误的语法命令,因此它认为这条组队,一定会发生错误,因此全体取消;
3.3.3 官方说明
4. 锁
4.1 悲观锁
执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观)。基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰。
Redis不支持悲观锁。Redis作为缓存服务器使用时,以读操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。
4.2 乐观锁
执行操作前假设当前操作不会被打断(乐观)。基于这个假设,我们在做操作前不会锁定资源,万一发生了其他操作的干扰,那么本次操作将被放弃。
5. Redis中的锁策略
- Redis采用了乐观锁策略(通过watch操作)。乐观锁支持读操作,适用于多读少写的情况!
- 在事务中,可以通过watch命令来加锁;使用 UNWATCH可以取消加锁;
- 如果在事务之前,执行了WATCH(加锁),那么执行EXEC 命令或 DISCARD 命令后,锁对自动释放,即不需要再执行 UNWATCH 了
第6章 redis消息订阅
消息订阅是进程间的一种消息通信方式,即发送者(pub)发送消息,订阅者(sub)接收消息。Redis支持消息订阅机制。
命令
描述
举例
SUBCRIBE [频道]
订阅频道
PUBLISH [频道][消息]
向指定频道发布消息
示例:
订阅者订阅消息后,此时控制台会处于阻塞状态,用于接收发布者发布的消息。
发布者发布消息: