当前位置: 首页 > article >正文

Redis事务

Redis事务

概念

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

事务操作

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

事务错误处理机制

  • 组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消
  • 如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚

乐观锁与悲观锁

在这里插入图片描述

  • 悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁
    在这里插入图片描述

  • 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的

乐观锁的使用

  • watch key [key …]
  • 在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
  • unwatch:取消 WATCH 命令对所有 key 的监视,如果在执行 WATCH 命令之后,EXEC 命令或DISCARD 命令先被执行了的话,那么就不需要再执行UNWATCH 了

http://www.kler.cn/a/17527.html

相关文章:

  • 【Java SE】接口类型
  • DApp开发:定制化解决方案与源码部署的一站式指南
  • Linux设置Nginx开机启动
  • Flink CDC(SQL Client)连接 MySQL 数据库教程
  • SpringBoot(七)使用mapper注解编写sql操作数据库
  • 基于表格滚动截屏(表格全部展开,没有滚动条)
  • zk之数据的发布与订阅
  • RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)RBF神经网络训练部分
  • 有趣的回文检测
  • 如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈
  • 2023/5/7周报
  • 猫狗训练集训练报错:Failed to find data adapter that can handle input
  • C++ Primer第五版_第十五章习题答案(21~30)
  • Spring Boot 整合 Swagger 教程详解
  • ChatGPT写文章效果-ChatGPT写文章原创
  • leetcode 530. 二叉搜索树的最小绝对差
  • 《互联网安全产品漏洞管理规定》
  • 【Linux Network】网络编程套接字
  • 轻松掌握在已有K8s环境上安装KubeSphere
  • 【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)
  • HTTP加密
  • 身份鉴别解读与技术实现分析(1)
  • 【Linux】多路转接--select、poll、epoll,非阻塞等待
  • 超大excel文件读,避免内存溢出
  • 【华为OD机试真题 Python】简单的解压缩算法 (100%通过)
  • node之Express