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 了

    6redis消息订阅

    消息订阅是进程间的一种消息通信方式,即发送者(pub)发送消息,订阅者(sub)接收消息。Redis支持消息订阅机制。

    命令

    描述

    举例

    SUBCRIBE [频道]

    订阅频道

     

    PUBLISH [频道][消息]

    向指定频道发布消息

     

    示例:

    订阅者订阅消息后,此时控制台会处于阻塞状态,用于接收发布者发布的消息。

    发布者发布消息: