首页 > 数据库 >redis事务

redis事务

时间:2022-11-21 15:11:26浏览次数:37  
标签:事务 版本号 redis 命令 队列 执行

redis事务

事务一般包括多个操作,不能被打断

Multi、Exec、discard

从输入multi命令开始,输入的命令都是依次进入命令队列中,但不会执行,直到输入exec后,redis会将之前的命令队列的命令队列的命令依次执行

组队的过程中可以通过discard来放弃组队。

举例:

事务中某个命令出现错误

则整个事务的组队队列会被取消

事务冲突问题

场景:有很多人知道你的账户,都想去双十一买东西

例子:

​ 一个人想给金额减去8000

​ 一个人想给金额减5000

​ 一个人想给金额减1000

解决方案

:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所有每次在拿数据的时候都会上锁。传统的关系型数据库都会用到这种锁机制

:乐观锁是对于数据冲突保持一种乐观态度,操作数据时不会对操作的数据进行加锁,只有到数据提交的时候才通过一种机制来验证数据是否存在冲突。

乐观锁通常是通过在表中增加一个版本(version)或时间戳(timestamp)来实现,其中,版本最为常用。

乐观锁每次在执行数据的修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行 +1 操作,否则就执行失败。

典型的例子:抢票系统

乐观锁的命令

watch key.....

第一个终端

第二个终端

redis事务的三特性

1.单独的隔离操作:

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

2.没有隔离级别的概念

​ 队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被执行

3.不保证原子性

​ 事务中如果有一条命令执行失败,其后面的命令仍然会被执行,没有回滚

标签:事务,版本号,redis,命令,队列,执行
From: https://www.cnblogs.com/wiseleer/p/16911434.html

相关文章

  • 【Azure Redis 缓存】Redis 连接失败
    问题描述AzureRedis出现连接失败,过一会儿后,又能自动恢复。 问题解答其实,因为AzureRedis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的计划内......
  • mysql中长事务详解
    什么是长事务运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用长事务。下面我将演示下如何开启......
  • SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
    一、前言在面试中,经常会有一道经典面试题,那就是:​​怎么防止接口重复提交?​​​小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重......
  • 分布式事务,EventBus 解决方案:CAP【中文文档】
    最新文档地址:https://github.com/dotnetcore/CAP/wiki前言很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对CAP还不......
  • Redis系列11:内存淘汰策略
    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster集......
  • Redis
    为什么用缓存:一句话:因为速度快,好用缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力实际开......
  • 【Spring系列】- Spring事务底层原理
    Spring事务底层原理......
  • 死锁引起的思考:事务(进程 ID 51)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲
    ​最近在做一个访问频率比较高的app接口,框架用的dapper,在我们后台写的异常日志会偶尔出现以下错误。事务(进程ID51)与另一个进程被死锁在锁资源上,并且已被选作死锁牺......
  • Redis-HyperLoglog
    Redis-HyperLoglog概览HyperLogLog作为一个实现基数统计的高效数据结构,被用在计算日活数据等应用领域,每个键占用的内容都是12k,但因为不存储实际的数据,因此可以统计2^64个......
  • Redission的几种写法
    失败无限重试-多个线程竞争,第一个拿到锁第二个会无限重试RLocklock=redisson.getLock("码哥字节");try{//1.最常用的第一种写法lock.lock();......