经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Redis-第六章节-事务 - Mr-Tsing
来源:cnblogs  作者:Mr-Tsing  时间:2021/2/1 11:50:37  对本文有异议

目录

  • 简介
  • 执行过程
  • 特点
  • 案例
  • watch

简介

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

执行过程

开始事务 -> 命令入队 -> 执行事务。

特点

① 批量操作在发送 exec 命令前被放入队列缓存。
② 收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然会被执行。
③ 在事务的执行过程中,其他客户端提交的命令请求不会插入到事务执行命令的序列中。

案例:

  • (1)正常执行

    1. localhost:6379> multi
    2. OK
    3. localhost:6379> set a 1111
    4. QUEUED
    5. localhost:6379> set b 2222
    6. QUEUED
    7. localhost:6379> set c 3333
    8. QUEUED
    9. localhost:6379> set d 4444
    10. QUEUED
    11. localhost:6379> exec
    12. 1) OK
    13. 2) OK
    14. 3) OK
    15. 4) OK
  • (2)取消事务

    1. localhost:6379> multi
    2. OK
    3. localhost:6379> set e 55555
    4. QUEUED
    5. localhost:6379> set f 66666
    6. QUEUED
    7. localhost:6379> discard
    8. OK
    9. localhost:6379> exec
    10. (error) ERR EXEC without MULTI
  • (3)编译型错误
    redis-error
    最后执行exec命令之后,会执行队列中的命令,队列中命令有失败的,所以最后整个命令都执行失败。
    编译型异常代码有问题,命令有错,事务中所有的命令都不会被执行。

  • (4)运行时错误

    1. localhost:6379> set a qqqq
    2. OK
    3. localhost:6379> multi
    4. OK
    5. localhost:6379> incr a
    6. QUEUED
    7. localhost:6379> set b 1111
    8. QUEUED
    9. localhost:6379> set c 2222
    10. QUEUED
    11. localhost:6379> set d 3333
    12. QUEUED
    13. localhost:6379> exec
    14. 1) (error) ERR value is not an integer or out of range
    15. 2) OK
    16. 3) OK
    17. 4) OK
    18. localhost:6379> keys *
    19. 1) "a"
    20. 2) "c"
    21. 3) "b"
    22. 4) "d"

    如果事务队列存在语法错误,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常。

watch

Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

  • 监控a时,a被修改
    1. //客户端1
    2. localhost:6379> set a 1111
    3. OK
    4. localhost:6379> WATCH a
    5. OK
    6. localhost:6379> MULTI
    7. OK
    8. localhost:6379> set a 2222
    9. QUEUED
    10. localhost:6379> exec
    11. (nil)
    12. //客户端2
    13. 127.0.0.1:6379> set a 567
    14. OK
  • 正常watch
    1. localhost:6379> set a 1111
    2. OK
    3. localhost:6379> WATCH a
    4. OK
    5. localhost:6379> MULTI
    6. OK
    7. localhost:6379> set b 222
    8. QUEUED
    9. localhost:6379> set c 333
    10. QUEUED
    11. localhost:6379> set d 444
    12. QUEUED
    13. localhost:6379> exec
    14. 1) OK
    15. 2) OK
    16. 3) OK
    17. localhost:6379> keys *
    18. 1) "a"
    19. 2) "c"
    20. 3) "b"
    21. 4) "d"

原文链接:http://www.cnblogs.com/ld320321/p/14349778.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号