• Redis事务


    Redis事务务务务务务务

    Redis事务:是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会受客户端传入的命令请求影响。

    总结说:Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令

    1. Redis事务没有隔离级别的概念
      1. 批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。
    2. Redis不保证原子性
      1. Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

    事务阶段

    1. 第一阶段:开始事务
    2. 第二阶段:命令入队
    3. 第三阶段、执行事务。

    事务命令

    • MULTI:标识一个事务的开启,即开启事务;
    • EXEC:执行事务中的所有命令,即提交;
    • DISCARD:放弃事务;和回滚不一样,Redis事务不支持回滚。
    • WATCH:监视Key改变,用于实现乐观锁。如果监视的Key的值改变,事务最终会执行失败。
    • UNWATCH:放弃监视。

    使用 MULTI命令后可以输入多个命令。Redis不会立即执行这些命令,而是将它们放到队列,当调用了EXEC命令将执行所有命令。

    事务错误类型

    语法错误(编译器错误) :命令都不能执行

    Redis类型错误(运行时错误) :除了类型错误的都可以执行

    Redis事务优缺点

    优点

    • 一次性按顺序执行多个Redis命令,不受其他客户端命令请求影响;
    • 事务中的命令要么都执行(命令间执行失败互相不影响),要么都不执行(比如中间有命令语法错误);

    缺点

    • 事务执行时,不能保证原子性;
    • 命令入队每次都需要和服务器进行交互,增加带宽;

    注意:

    • 当事务中命令语法使用错误时,最终会导致事务执行不成功,即事务内所有命令都不执行;
    • 当事务中命令知识逻辑错误,就比如给字符串做加减乘除操作时,只能在执行过程中发现错误,这种事务执行中失败的命令不影响其他命令的执行。

    不提供回滚的原因

    • 使用Redis命令语法错误,或是将命令运用在错误的数据类型键上(如对字符串进行加减乘除等),从而导致业务数据有问题,这种情况认为是编程导致的错误,应该在开发过程中解决,避免在生产环境中发生;
    • 由于不用支持回滚功能,Redis内部简单化,而且还比较快;

    关系型数据库事务具有四大特性

    1. 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
    2. 隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
    3. 持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
    4. 一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  • 相关阅读:
    微信小程序自动化测试实践(附 Python 源码)| 实战系列
    解析网络和协程
    ConcurrentHashMap put和扩容的源码深度解析(内含JDK8中3个bug以及修复的版本)
    maven笔记
    configure: error: cannot compute suffix of object files: cannot compile
    【智能优化算法-灰狼算法】基于翻筋斗觅食策略的灰狼优化算法求解单目标优化问题附matlab代码
    安装多个不同版本chrome浏览器
    1155掷骰子等于目标和的方法数 (dfs + 记忆化搜索)
    单例模式(Singleton)
    手把手教你搭建ELK-新手必看-第一章:搭建ES
  • 原文地址:https://blog.csdn.net/mysnsds/article/details/126394299