zoukankan      html  css  js  c++  java
  • Redis学习-11 事物讲解

    事物的本质:一组命令的集合!一个事物中的所有命令都会被序列化,在事物执行过程中,会按照顺序执行!

    特点:一次性、顺序性、排他性!执行一系列的命令!

    Redis事物没有隔离级别的概念!

    所有的名令在事物中,并没有直接被执行!只有发起执行命令的时候才会执行! Exec

    Redis单条命令是保证原子性的,但事物不保证原子性

    redis的事务步骤:

    1. 开启事务(multi)
    2. 命令入队()
    3. 执行事务(exec)
    127.0.0.1:6379> multi  #开启事务
    OK
    127.0.0.1:6379> set k1 v1 #命令入队
    QUEUED
    127.0.0.1:6379> set k2 v2
    QUEUED
    127.0.0.1:6379> get k2
    QUEUED
    127.0.0.1:6379> set k3 v3
    QUEUED
    127.0.0.1:6379> exec  #执行事务(注意,这个事务执行完后就消失了,需要事务的话需要重新开启)
    1) OK
    2) OK
    3) "v2"
    4) OK

    127.0.0.1:6379> multi  #再次开启事务
    OK
    127.0.0.1:6379>
    127.0.0.1:6379> set k1 v1
    QUEUED
    127.0.0.1:6379> set k2 v2
    QUEUED
    127.0.0.1:6379> set k4 v4
    QUEUED
    127.0.0.1:6379> discard  #放弃事务,放弃后这个事务中的所有命令都会失效
    OK
    127.0.0.1:6379> get k4  #所以k4为空
    (nil)

    • 编译型异常(代码有问题!命令有错!):事务中所有的命令都不会执行!
    • 运行时异常(如1/0):如果事务队列中存在语法错误,那么执行命令的时候,其它命令仍然可以正常执行的。
    编译时异常的案例
    127.0
    .0.1:6379> multi OK 127.0.0.1:6379> set k1 v1 QUEUED 127.0.0.1:6379> set k2 v2 QUEUED 127.0.0.1:6379> set k3 v3 QUEUED 127.0.0.1:6379> getset k3 #故意写一个错误的命令 (error) ERR wrong number of arguments for 'getset' command #编译时异常 127.0.0.1:6379> set k4 v5 QUEUED 127.0.0.1:6379> exec #执行事务,发现报错 (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379> get k1 #所有的命令都未执行
    (nil)

    运行时异常的案例
    127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> incr k1 #对一个字符串+1,编译时没有异常 QUEUED 127.0.0.1:6379> set k2 v2 QUEUED 127.0.0.1:6379> get k2 QUEUED 127.0.0.1:6379> exec 1) (error) ERR value is not an integer or out of range #运行时抛出异常,但不影响其它语句的执行 2) OK 3) "v2"
     
  • 相关阅读:
    扩展知识
    day61——多表操作(增、删除、改、基于对象的跨表查询)
    day60——单表操作补充(批量插入、查询、表结构)
    day59——orm单表操作
    day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间
    day57——视图、模板渲染
    WARNING: Ignoring invalid distribution -ip
    Python- 【python无法更新pip】提示python.exe: No module named pip
    Anaconda Prompt 切换路径不能进入D盘
    Failed calling sys.__interactivehook__ 错误的解决
  • 原文地址:https://www.cnblogs.com/gslgb/p/13414274.html
Copyright © 2011-2022 走看看