• Redis事务、pub/sub、PipeLine-管道、benchmark性能测试详解


    一. 事务

    1. 概念补充

    (1). 原子性

    一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    2. redis事务说明

     Redis的事务并不是我们传统意义上理解的事务,我们都知道 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    总结:

     (1). Redis事务中如果有某一条命令执行失败,之前的命令不会回滚,其后的命令仍然会被继续执行→ →鉴于这个原因,所以说redis的事务严格意义上来说是不具备原子性的。

     (2). Redis事务中所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

     (3). 在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,其后所有待执行的语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行EXEC命令之后,那么该事务中的所有命令都会被服务器执行。

     (4). 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕机,那么此时也许只有部分数据被写入到磁盘,而另外一部分数据却已经丢失。Redis服务器会在重新启动时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。此时,我们就要充分利用Redis工具包中提供的redis-check-aof工具,该工具可以帮助我们定位到数据不一致的错误,并将已经写入的部分数据进行回滚。修复之后我们就可以再次重新启动Redis服务器了。

    3. 流程/指令

    (1)multi 开启事务

    (2)大量指令入队

    (3)exec执行事务块内命令,截止此处一个事务已经结束。

    (4)discard 取消事务

    (5)watch 监视一个或多个key,如果事务执行前key被改动,事务将打断。unwatch 取消监视。

  • 相关阅读:
    玩玩群晖NAS-搭建一个私有的Git服务
    【牛客网面试必刷】链表篇
    Topic 20. 临床预测模型之竞争风险模型及计算生存概率
    css基础之实现轮播图
    图片编辑用什么软件?快把这些软件收好
    Java修仙之基础功法篇->构建者模式
    算法训练第六十三天|被围绕的区域
    获取手机号归属地详情,精准高效的API接口服务
    P1825 [USACO11OPEN]Corn Maze S——bfs
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java教务信息管理系统3rtdg
  • 原文地址:https://blog.csdn.net/Linuxhus/article/details/128202868