Redis【11】-Redis发布订阅

Redis 事务
Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞)
简介
Redis 事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令), 并且带有以下两个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令
执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事
务执行命令序列中。
1. Redis 会将一个事务中的所有命令序列化,然后按顺序执行
2. 执行中不会被其它命令插入,不许出现加赛行为
常用命令
DISCARD
: 取消事务,放弃执行事务块内的所有命令。
EXEC
: 执行所有事务块内的命令。
MULTI
: 标记一个事务块的开始。
UNWATCH
: 取消 WATCH 命令对所有 key 的监视。
WATCH key [key ...]
: 监视一个 ( 或多个 ) key ,如果在事务执行之前这个 ( 或这些 ) key 被其他命令所改动,那么事务将被打断。
一个事务从开始到执行会经历以下三个阶段:
  • 开始事务。
  • 命令入队。
  • 执行事务。
示例 1 MULTI EXEC
转帐功能, A B 帐号转帐 50 一个事务的例子,它先以 MULTI 开始一个事务,然后将多个命令入队到事务中,最后由 EXEC 命令触发事务
输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行 2 直到输入 Exec 后, Redis 会将 之前的命令队列中的命令依次执行

示例2 DISCARD放弃队列运行

1输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执

2直到输入Exec后,Redis会将之 前的命令队列中的命令依次执行。

3命令队列的过程中可以通过discard来放弃队列运行

示例 3 事务的错误处理
事务的错误处理: 如果执行的某个命令报出了错误,则只有报错的命令不会被执行,而其它的命令都会 执行,不会回滚。
示例 4 事务的错误处理
事务的错误处理: 队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消。

由于之前的错误,事务执行失败

示例 5 事务的 WATCH
WATCH key [key ...]
: 监视一个 ( 或多个 ) key ,如果在事务执行之前这个 ( 或这些 ) key 被其他命令所改动,那么事务将被打断。
需求:某一帐户在一事务内进行操作,在提交事务前,另一个进程对该帐户进行操作。
应用场景
一组命令必须同时都执行,或者都不执行,我们想要保证一组命令在执行的过程之中不被其它命令插 入。
案例
抢购:(秒杀)
目的: 宣传。 (发波福利)。
小米: 100 台手机 --- 999 元。(原价 1299

10 万同时点击 秒杀功能
条件: 1 个用户只能抢到一个手机。
if ( set > 100 ){
return " 秒杀已结束 " ;
} else {
set 类型 key : 年月日 : 小米手机
}
升级功能:
10 万同时点击 秒杀功能 ---
小米: 100 台手机。 创维: 100 台电视。 格力: 100 台空调。
条件: 1 个用户只能秒杀一个产品。还要知道用户秒杀的是哪个商品
set 类型: 手机 100 台 数据结果集
set 类型: 电视 100 台 数据结果集
set 类型: 空调 100 台 数据结果集
Hash key 用户名 小米
王磊 手机, 杨琛 电视

你可能感兴趣的:(服务端-Redis,redis,数据库,java)