首页 > 数据库 >redis的事务

redis的事务

时间:2024-04-18 13:57:03浏览次数:23  
标签:事务 redis watch 命令 执行 不会

回顾阳哥的redis视频,总结一下redis的事务。

是什么

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

能干嘛

一个队列中,一次性,顺序性,排他性的执行一系列命令。

watch监控

watch使得exec命令需要有条件地执行:事务只能在所有被坚持键都没有被修改的前提下执行,如果这个前提不能满足的话,事务就不会被执行。

 

悲观锁/乐观锁

悲观锁:

       悲观锁,顾名思义,就是很悲观,每次去拿数据的时候都被认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁的。

 乐观锁:

       乐观锁,顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

小结:

1.watch指令,类似乐观锁,事务提交的时候,如果key的值已经被别的客户端改变,比如某个List已经被别的客户端push/pop过了,那么整个事务队列都不会被执行。

2.通过watch命令在事务执行之前监控了多个keys,倘若在watch之后有任何key的值发生了变化,exec命令执行的事务都将被放弃,同时返回Nullmuti-bulk应答以通知调用者事务执行失败。

 

3个阶段:

1.开启:以MULTI开始一个事务

2.入队:将多个命令入队到事务中去,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。

3.执行:由EXEC命令触发事务

 

3个特性:

1.单独的隔离操作:事务中的所有命令都会序列化,按顺序执行。事务在执行的过程中,不会被其它客户端发送来得命令请求所打断

2.没有隔离级别的概念:队列中的命令没有提交之前都不会实际的执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头疼的问题。

3.不保证原子性:redis同一个事务中如果由一条命令执行失败,其后的命令仍然会被执行,没有回滚。

 

标签:事务,redis,watch,命令,执行,不会
From: https://www.cnblogs.com/huwy-123/p/18143351

相关文章

  • 【Docker】Docker部署Redis
    ✨Docker本文介绍DockerDesktop以及docker命令行的简单使用DockerDesktop安装使用请查阅官方文档GetDocker|DockerDocumentation在Windows上安装DockersDesktop可参考【Docker】DockerDesktopforWindows(WSL2)安装-双份浓缩馥芮白-博客园(cnblogs.com)似乎......
  • 多RedisTemplate配置
    SpringBoot自2.0版本开始默认使用Lettuce作为Redis的客户端,多RedisTemplate配置方法如下:先对lettuce连接池配置,基于lettuce配置多数据源的连接工厂,使用@Primary标注为首选的bean,以及指定并名称,再基于连接工厂配置多数据源的redisTemplate。点击查看代码packagecom.hnltd.a......
  • redis 哨兵部署
    redis生产哨兵的测试1、helmrelease的版本helmrepoaddbitnamihttps://charts.bitnami.com/bitnamihelmpullbitnami/redis--version18.2.2sentinel-redis]#lsredisredis-18.2.2.tgzvalues.yaml配置文件注意配置文件的cm部分,先使用默认的configmap配置然后再......
  • 腾讯音乐:说说Redis脑裂问题?
    Redis脑裂问题是指,在Redis哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会在从节点中选举出一个新的主节点,此时Redis的集群中就出现了两个主节点的问题,就是Redis脑裂问题。脑裂问题影响Redis......
  • docker部署redis
    拉取镜像dockerpullredis:6.2.6创建映射目录和文件mkdir-p/data/server/docker_redis/data官网下载对应版本redis.conf,放在/data/server/docker_redis/目录下运行redisdockerrun-d-p6379:6379--name=redis--privileged=true-v/data/server/docker_redis/redis.c......
  • redis自学(36)散列插槽
    散列插槽Redis会把每一个master节点映射到0~16383共16284个插槽(hashslot)上,查看集群信息时就能看到:  数据key不是与节点绑定,而是与插槽绑定。Reids会根据key的有效部分计算插槽值,分两种情况:l Key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分l Key中......
  • 基于Redis实现基本抢红包算法
    简介:[key,value]的缓存数据库,Redis官方性能描述非常高,所以面对高并发场景,使用Redis来克服高并发压力是一个不错的手段,本文主要基于Redis来实现基本的抢红包系统设计.发红包模块:1:发红包模块流程图如下:  用户首先输入红包金额和红包个数,然后生成当前红......
  • MySQL的三大日志及事务
    标题其实不太准确,应该是MySQL的binlog,InnoDB的redolog和undolog 事务的四大特征:ACID, 其中原子性(A)、隔离性(I)和持久性(D)是手段, 一致性(C)是目标。Atomicity   原子性 ==》由undolog实现Consistency一致性 ==》最终的目标,由AID共同来保证Isolation   ......
  • SpringBoot 事务失效常见的原因
    low一点的原因:1.非public方法2.异常被处理了(trycatch)3.bean没被Spring管理,比如没加Component注解4.数据库不支持(比如MyISAM) 高大上一点的原因:5.内部方法调用,可以注入本实例的代理类,通过代理类来调用6.抛出的是非RuntimeException,可以这么解决(@Transactional(rollb......
  • redis自学(35)搭建分片集群
    分片集群结构主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:l 海量数据存储问题l 高并发写的问题使用分片集群可以解决上述问题,分片集群特征:l 集群中有多个master,每个master保存不同数据,因此能存多少取决于master节点的数量,解决了海量数据存储的......