mysql中的事务:

  • ACID:原子性,一致性,隔离性,持久性。
  • 同时成功或失败。

redis中的事务:

  • 单条命令是保证原子性的,但事务不是保证原子性!
  • 一组命令的集合,一个事务中的所有命令都会被事务化,顺序化执行。
  • Redis具有一次性(运行完将删除),顺序性,排他性,没有隔离级别的概念
  • 编译性错误,都不会执行。
  • 运行时错误,会跳过错误语句,其他仍然正常执行。

开启事务

新建一段事务

multi 

命令入队

添加命令到事务中

开启事务

执行命令

exec

取消事务

取消命令

discard

监控

watch key

悲观锁

  • 很悲观,认为什么时候都会出现问题,无论做什么都会加锁。
  • Redis不支持悲观锁。Redis作为缓存服务器使用时,以读操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。
  • 悲观锁: 适合多写少读的场景! 只写不读的场景!

乐观锁

  • 很乐观,认为什么时候都不会出问题,所以不会上锁,更新数据的时候判断一下,再次期间是否有人修改过值
  • 乐观锁:适合多读少写,或只读不写的场景!
  • 将乐观锁,放在多写少读的场景,此时消耗大量的资源!
  • 在事务中,可以通过watch命令来加锁;使用 UNWATCH可以取消加锁;
  • 如果在事务之前,执行了WATCH(加锁),那么执行EXEC 命令或 DISCARD 命令后,锁对自动释放,即不需要再执行 UNWATCH 了

测试多线程修改值,使用watch可以当作redis的乐观锁操作

文章作者: 郭远
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郭远的博客空间
Redis Redis
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝