手机网站如何跳转,淘宝客网站html,湘潭网站建设优等磐石网络,邯郸网站建设公司一 redis事务
事务核心参考
① 基础概念
1、场景引入核心#xff1a;通过现象思考原因? 2、事务的概念 3、事务四大特性说明#xff1a; redis只具备部分特性 重点1#xff1a; 原子性和一致性 重点2#xff1a; 隔离性和持久性 ② redis的事务
1、基础铺垫备注引入核心通过现象思考原因? 2、事务的概念 3、事务四大特性说明 redis只具备部分特性 重点1 原子性和一致性 重点2 隔离性和持久性 ② redis的事务
1、基础铺垫备注 redis提供了简单的事务,不支持事务回滚 2、redis的事务命令核心点1、在一个客户端操作的时候,把所有的指令一次性按照顺序放在一个队列中2、执行完了之后再让其他的客户端操作
事务相关的命令
1、multi -- 开启事务,标记一个事务块的开始备注 设定事务的开启 start位置,此指令执行后,后续的所有指令均加入到事务中2、exec -- 执行事务作用设定事务的结束 end位置,同时执行事务,与multi 成对出现,成对使用备注1若在事务队列中存在命令性错误,则执行EXEC命令时,所有命令都不会执行备注2若在事务队列中存在语法性错误,则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常也即已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己在代码中实现回滚3、discard作用 终止当前事务的定义,发生在multi之后,exec之前场景 你在命令入队列的时候,发现你有些命令指令输入错误,你不想执行了,这个时候,你不想提交事务了 备注1、mysql的commit是先执行了,然后又回滚了2、而redis的discard是取消redis服务器暂存队列的内容,不执行QUEUED : 队列 备注1、虽然将命令序列化后发给redis服务器,但是redis并没有执行2、而是放在一个独立的暂存区域[队列中]3、只有客户端发送EXEC的命令,对于redis就是一个信号,redis服务器端才会执行.缺点每次发送命令都会进行一个I/O操作,在服务器进行多个命令打包
③ 事务特殊情况
1、语法 synax错误 说明 报错时,所有的命令都不会执行,完全回滚命令语法错误: 一个事务中的多个命令都不会执行备注 语法错误,redis-cli客户端会进行校验 2、类型操作错误备注 在类型执行时报错,这时一个事务中的多个命令,对的会执行,错的不会执行 说明 redis只有在服务器端执行才知道是否错误常见 1、incr email email不是整数类型2、number 不是 list列表类型 ④ 事务小结 ⑤ 事务的工作流程
一个事务从开始到结束通常会进过以下三个阶段1事务开始 2命令入队 3事务执行 百度二面谈谈你对Redis事务的理解
⑥ watch
说明 watch 监控key备注 redis使用watch来提供乐观锁,类似 cascheck and set 乐观锁
乐观锁version和时间戳外的实现方式
乐观锁的version和timestamp
分布式锁和消息队列
思考 乐观锁乐观在哪? redis 锁和分布式锁
1、不开启watch监控时,事务中的key被修改不影响事务的执行2、开启watch监控时,事务中的key被修改影响事务的执行 -- 案例演示 结果1、由于在redis-cli中的 key k1被watch监控2、另一个redis客户端修改k1后,再执行事务修改k1,则整个事务中的所有命令都不会执行补充 unwatch 取消监控key ⑦ 并发竞争key
分布式锁和消息队列
核心点 体会设计思路