侧边栏壁纸
博主昵称
流苏小筑

步伐虽小,密而不止

Redis事务

2023年05月06日 62阅读 0评论 0点赞

Redis事务

什么是事务?

Redis 事务可以一次执行多个命令, 本质是一组指令集,是一个单独的隔离操作,事务中的所有命令都会按顺序地串行化执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务:Multi。
  • 命令入队:操作命令。
  • 执行/撤销事务:Exec/discard。

m4gx4tko.png

Redis和MySQL对比

m4gx4y6t.png

事务的错误处理:

  • 如果在入队列阶段出现语法错误

    • 所有命令都不会执行
  • 如果在执行阶段出现错误

    • 只有报错的命令不会执行,其他命令都会执行,不会回滚

Redis锁机制

悲观锁:只有一个线程能操作数据,操作是给数据加锁

乐观锁:对数据不加锁,通过版本号或者时间戳实现

WATCH

在执行multi直线,限制性watch key,可以监视一个或多个key,如果在事务执行之前,这个key被其他命令改动,则停止执行事务。

Redis事务三特性

  • 单独的隔离操作

    • 事务中的所有命令都会序列化执行,事务执行过程中不会被其他事务打断
  • 没有隔离的概念

    • 队列中的命令在事务提交之前都不会被执行。
  • 不保证原子性

    • 在执行阶段,事务中如果有一条命令执行失败,其他命令仍然会被执行。

Redis中的LUA脚本(Redis>2.6)

LUA脚本类似redis事务,具有一定的原子性,不被其他命令插队,可以完成一些事务性操作。

利用lua脚本解决争抢问题,实际上就是redis利用其单线程的特性,用任务队列的方式解决了多并发问题

0

—— 评论区 ——

昵称
邮箱
网址
取消