首页 > 数据库 >【Redis】事务

【Redis】事务

时间:2022-10-11 17:26:27浏览次数:52  
标签:事务 EXEC Redis watch 命令 执行


一、Redis事务的概念
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

二、Redis事务没有隔离级别的概念
批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。

三、Redis不保证原子性
Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

四、Redis事务的三个阶段

  1. 开始事务
  2. 命令入队
  3. 执行事务


五、Redis事务相关命令

  1. watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,
  2. 被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
  3. multi : 标记一个事务块的开始( queued )
  4. exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 ) 
  5. discard : 取消事务,放弃事务块中的所有命令
  6. unwatch : 取消watch对所有key的监控


六、Redis事务使用案例
(1)正常执行

(2)放弃事务

 

 

(3)若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行

 

 

(4)若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。

 

 

(5)使用watch
案例一:使用watch检测balance,事务期间balance数据未变动,事务执行成功

 

 


案例二:使用watch检测balance,在开启事务后(标注1处),在新窗口执行标注2中的操作,更改balance的值,模拟其他客户端在事务执行期间更改watch监控的数据,然后再执行标注1后命令,执行EXEC后,事务未成功执行。

 

 

 

 

一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。
故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。

总结
watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。

标签:事务,EXEC,Redis,watch,命令,执行
From: https://www.cnblogs.com/cuipengchong/p/16779848.html

相关文章

  • springboot2 集成redis
    #redissettingsspring.redis.database=0spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.password=spring.redis.timeout=5000msspring.redis.let......
  • Redis主从复制
    1、主从复制单个Redis如果因为某种原因宕机的话,可能会导致Redis服务不可用,可以使用主从复制实现一主多从,主节点负责写的操作,从节点负责读的操作,主节点会定期将数据同......
  • Redis 的数据过期了就会马上删除么?
    Redis的数据过期了就会马上删除么?我在3A服务器平台购买了服务器,部署了相关环境,正好可以解答一下这个问题先说结论,并不会立马删除,Redis有两种删除过期数据的策略:定期选......
  • Redis - 如何 Windows 后台运行 redis-server.exe
    Redis-如何Windows后台运行redis-server.exe?       环境变量   把redis-server.exe安装成windows服务。  redis-server.exe--servic......
  • Redis持久化机制
    一、全量同步与增量同步Redis在不明原因宕机的情况下,数据是不会宕机的。因为数据已持久化。持久化策略分为全量同步与增量同步.1、全量同步(RDB):每天定时(避开高峰期)或者采......
  • Redisson分布式锁
    待到秋风四起时,孤舟远赴倒悬山。官方文档:https://github.com/redisson/redisson使用示例更多请参考官方文档引入依赖<dependency>  <groupId>org.redisson</gro......
  • 详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
    来源:https://my.oschina.net/zudajun/blog/666764前言说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。四大还好说,问题是......
  • RedisShake迁移同步工具
    阿里开源项目地址:https://github.com/alibaba/RedisShake程序下载地址:https://github.com/alibaba/RedisShake/releases下载最新程序,里面包含了配置文件https://gith......
  • flinksql读写redis
    0、前言最近有个需求,需要使用flinksql读写redis,由于官网上并没有redis的connector,在网上找了很久,开源的几个connector又没法满足要求,所有这里就自己动手实现了一个。......
  • redis新数据类型Bitmaps基础操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、Bitmaps相关操作说明:现在的计算机用二进制(位)作为信息的基础单位,Bitmaps......