Redis中事务的相关概念

  1. Redis的事务定义
  • Redis事务是一个单独的隔离操作,事务中的所有命令都会序列化,按顺序执行。事务 在执行过程中,不会被其他客户端发送来的命令打断;
  • Redis事务的主要作用就是串联多个命令防止其他命令插队

2. Multi、Exec、discard

  • 从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行,组队过程中可以通过discard来放弃组队

3. 事务的错误处理

  • 组队中某个命令出现了错误报告,执行时整个的所有队列都会被取消
  • 如果在执行队列时某个命令出错了,只是该命令会失败,而其他命令则不受影响

4. Redis事务三特性

  • 单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断
  • 没有隔离级别的概念:队列中的命令没有提交之前不会被实际执行,因为事务提交前任何指令都不会被实际执行
  • 不保证原子性:事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

5.悲观锁和乐观锁的相关解释

  • 悲观锁,顾名思义就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁,传统的关系型数据库里面就用到了很多这种锁机制,比如行锁,表锁等,读锁和写锁等,都是在操作之前先上锁
  • 乐观锁,顾名思义就很乐观,每次拿数据都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的

6.lua脚本相关知识点

  • 利用lua脚本解决争抢问题,实际上是利用 reids单线程的特性,用任务队列的方式解决多任务并发的问题
  • lua是类似redis事务,有一定的原子性,不会被其他命令插队,可以完成一些redis事务性的操作
  • 将复杂的或者多步的redis操作,写为一个脚本,一次提交给redis执行,减少反复连接redis的次数,提升性能
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章