首页 > 数据库 >Redis:四、事务

Redis:四、事务

时间:2023-02-24 21:37:18浏览次数:45  
标签:事务 Watch Redis 命令 num key

Redis系列文章目录

@

目录


一、Redis事务是什么?

概念:

  • 可以一次执行多个命令,本质是一组命令的集合。一个事务中所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不允许阻塞。

如何使用?

在这里插入图片描述

  1. 事务相关命令:
    (1) DISCARD 取消事务,放弃执行事务块内地所有命令;
    (2) EXEC 执行所有事务块内的命令;
    (3) MULTI 标记一个事务块的开始;
    (4) UNWATCH 取消WATC命令对所有key的监视;
    (5) WATCH key [key ....] 监视一个或者多个key,如果在事务执行之前这个key被其它命令所改动,那么事务会被打断;

  2. 事务的正常执行:
    在这里插入图片描述

  3. 放弃事务:
    在这里插入图片描述

  4. 全体连坐:类似于Java中的异常处理,书写代码时就会报错,但是它不会处理 1/0=xx 这种错误,这种错误需要在编译时才能被发现。
    在这里插入图片描述

  5. 冤头债主:说明了Redis对事务是部分支持
    在这里插入图片描述

  6. watch监控

  • 表锁:将整张表锁住,其它行的任何操作都不行;

  • 行锁:仅仅锁住这一行。

  • 悲观锁:类似于表锁。数据的正确性是最高的。
    在这里插入图片描述

  • 乐观锁:类似于行锁。每条记录包括一个Version版本信息,每次有用户修改后Version加1。此时如果有A和B两个用户共同修改一条记录,但是A先提交后将Version+1;然后B再去提交时会报错,因为此时数据库中该条记录的Version已经为2了,就需要B重新从数据库中获取该条记录然后再次修改后提交。这样保证了数据的统一性。
    在这里插入图片描述
    在这里插入图片描述

  • watch的应用:
    在这里插入图片描述

  • watch:watch命令是一个乐观锁,它可以在EXEC命令执行前,监视任意数量的数据库键,并在EXEC命令执行时,检查被监视的键是否至少有一个已经被修改过了,如果是的话服务器会拒绝执行事务。

  • unwatch命令:放弃对所有key的监控。

  • 一旦执行了exec,之前加的所有的监控锁都会被取消掉了。

  • Watch 命令可以被调用多次,一个Watch 命令可以监控多个key。Watch 命令调用即启动监控功能,从Watch 命令开始点到执行EXEC命令终止。一旦EXEC被调用,所有的键都将不被监视,无论所讨论的事务是否被中止。关闭客户端连接也会触发所有的键被取消监视。

  • Redis Watch 命令给事务提供check-and-set (CAS) 机制。被Watch的Key被持续监控,如果key在Exec命令执行前有改变,那么整个事务被取消,Exec返回null表示事务没有成功。
    实例:

num = GET sampleKey
num = num + 1
SET sampleKey $num

上面的命令在单用户环境下没有问题。如果多个用户都尝试同时增加值就会出现竞争条件,此时结果为14而不是15.

WATCH sampleKey
num = GET sampleKey
num = num + 1
MULTI
SET sampleKey $num
EXEC

使用了WATCH 关键字能够有效保障竞争条件,一个用户修改后另外一个用户就不能操作了。


事务总结:
在这里插入图片描述
在这里插入图片描述

二、Redis消息发布订阅?

进程间的一种通信模式,发送者(pub) 发送消息,订阅者(sub) 接收消息。一般使用 rabbitmq来作为消息发布订阅。

//可以一次订阅多个
SUBSCRIBE c1 c2 c3;

//消息发布
PUBLISH c2  hello-redis

//订阅多个
PSUBSCRIBE new*

参考:
violate特性详解: https://www.cnblogs.com/monkeysayhi/p/7654460.html
https://blog.csdn.net/jiyiqinlovexx/article/details/50989328

标签:事务,Watch,Redis,命令,num,key
From: https://www.cnblogs.com/istitches/p/17153151.html

相关文章

  • Redis:五、主从复制
    @目录一、主从复制的概念二、主从复制基础用法2.1工作流程(1)建立连接2.2工作流程(2)数据同步2.3工作流程(3)命令传播三、主从复制实例四、主从复制常见问题五、主从复制的......
  • Redis:六、哨兵模式
    @目录一、哨兵模式简介二、哨兵的搭建三、哨兵工作原理一、哨兵模式简介哨兵(Sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机......
  • Redis:七、集群
    @目录一、集群是什么?二、集群的存储结构设计三、集群的搭建四、主从下线和主从切换总结一、集群是什么?集群:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方......
  • Redis:三、持久化操作
    Redis系列文章目录@目录Redis系列文章目录一、Redis配置文件解析INCLUDES包含GENERAL通用SECURITYLIMITS限制二、Redis持久化---RDB方式2.1RDB(RedisDataBase):2.2......
  • Redis:二、jedis线程池
    中间件---Redis@目录中间件---Redis前言一、什么是jedis二、使用步骤1.Jedis读写redis数据(案例)2.编码2.1设定业务方法:2.2设定线程类,模拟用户调用:2.3设计redis......
  • Redis设计与实现—对象
    前言 前面介绍了Redis底层的数据类型,但是Redis常用的五种数据结构是怎样的呢?@目录前言一、对象类型介绍1.1概念1.2对象类型和编码1)type:类型2)encoding:编码和底层实现......
  • Redis设计与实现—复制原理
    前言Redis中的复制命令原理@目录前言一、旧版复制原理1.1同步1.2命令传播1.3旧版复制的缺陷二、新版复制原理2.1部分重同步2.1.1复制偏移量2.1.2复制积压缓冲区2......
  • Redis设计与实现—简单动态字符串、链表、字典
    前言《Redis设计与实现》数据结构部分有关字符串类型介绍。@目录前言一、数据结构——简单动态字符串1.1SDS定义1.2SDS与C字符串的区别1.2.1常数复杂度获取字符串长度......
  • Redis设计与实现—事件机制
    前言Redis内部消息通信机制学习和了解@目录前言一、Redis中事件的分类文件事件文件事件处理器I/O多路复用程序的实现文件事件处理器时间事件时间事件怎么处理关键的时......
  • Redis设计与实现—数据库与过期键策略
    前言深入了解一下Redis内存机制如何存储数据,以及对于过期数据采取何种策略来清理。@目录前言一、Redis服务器中的数据库二、数据库键空间2.1数据存储——键空间dict2.......