redis事物定义:

  》Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

  》Redis事务的主要作用就是串联多个命令防止别的命令插队。(redis单线程的,所以不会线程抢占的情况)

  命令队列

  multi 、exec 、discard

  》multi命令开始,后面的命令都会放入命令队列(quenen),但是不会执行,直到执行exec命令,才会顺序执行命令队列中的命令。

  》如果想放弃组队,通过discard命令来通知redis.

事物的错误处理有两种:

  》第一种命令组队时,报错。在执行时,整租所有的命令都会被取消。

  》第二种是组队时不报错,执行时个别命令出错。则只有报错的命令不会执行,而其他命令正常执行,且不回滚

WATCH key [key ...]

  》在执行multi之前,先执行watch key.监视一个(或多个)key,如果执行事务之前,key被其他命令改了,那么该事务不能执行。

UNWATCH key

  》取消监视

  注意:如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了

两种锁机制:

  》悲观锁:当一开始操作(读取、更改)数据时,就锁住该数据不让其他人操作,直到自己不再操作,才会释放锁。

  》乐观锁:操作数据时,不会锁住资源,这样并发性好,但是会有一个版本号,当更新时,也会更新版本号。其他人会与版本号做对比,以确保读到的是最新的数据。

 redis事务的三特性

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

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

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

Redis事物的更多相关文章

  1. Redis 事物

    MULTI . EXEC . DISCARD 和 WATCH 是 Redis 事务的基础. Multi 和 Exec Multi:开启一个事务,它总是返回 OK .执行之后, 客户端可以继续向服务器发 ...

  2. Redis事物及锁的运用

    redis与mysql事物比较如下: 下面是一个redis事物运用于买票的demo

  3. Redis 事物、悲观、乐观锁 (详细)

    1,概论 事物这东西相信大家都不陌生吧,在学习Spring,Mybatis等框架中, 只要是涉及到数据存储和修改的,都会有事物的存在, 废话就不多说了下面我们来简单的介绍下Redis事物以及锁. 2, ...

  4. SpringBoot进阶教程(二十八)整合Redis事物

    Redis默认情况下,事务支持被禁用,必须通过设置setEnableTransactionSupport(true)为使用中的每个redistplate显式启用.这样做会强制将当前重新连接绑定到触发m ...

  5. Redis - 事物控制和发布订阅

    multi命令后续命令将进入队列,不会马上执行,当执行exec后,一次输出所有结果 事物回滚使用discard命令,放弃之前的输入执行. SUBSCRIBE/PUBLISH SUBSCRIBE KEY ...

  6. 使用redis事物解决stringRedisTemplate.setIfAbsent()并设置过期时间遇到的问题

    spring-date-redis版本:1.6.2场景:在使用setIfAbsent(key,value)时,想对key设置一个过期时间,同时需要用到setIfAbsent的返回值来指定之后的流程,所 ...

  7. Redis常用数据类型和事物以及并发

    Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...

  8. Redis发布订阅和事物笔记

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 cha ...

  9. Redis的事物

    Redis的事物 Redis 事物常用命令 multi标记一个事物块的开始   exec:执行所有事物块内的命令   discard: 取消事物,放弃执行事物块的所有命令   watch key [k ...

随机推荐

  1. Deep Knowledge Tracing (深度知识追踪)

    论文:Deep Knowledge Tracing    Addressing Two Problems in Deep Knowledge Tracing via Prediction-Consis ...

  2. spring程序打包使用该插件,不然容易报错xsd找不到

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade ...

  3. springmvc组件--ViewResolver

    无论Controller是何种返回类型最终都会被封装成一个ModelAndView对象,然后交由ViewResolver解析成Vie对象.该接口定义非常简单,根据传入视图的逻辑名(var1)和相应的国 ...

  4. apache反向代理出现502调整

    1.问题描述:项目上线后,会在接口调用时客户端出现502异常,而服务端则对该此请求作出处理. 2.问题原因:经过排查后得知是由于请求并发量大,造成超过请求超时间,但是apache中队列已经加载到请求信 ...

  5. Java中Enumeration接口的用法

    Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法,与Iterator差不多,用来遍历集合中的元素  但是枚举Enumeration只提供 ...

  6. 淡旺季机票的价格问题(switch语句与if-else语句嵌套)

    项目背景 淡旺季机票的价格,原价机票价格为5000元, 淡季头等舱打5折,经济舱打4折 旺季头等舱打9折,经济舱打8折 要求 编写程序实现: 输入任意的月份与舱位来计算机票的价格 1代表头等舱,2代表 ...

  7. Springboot知识点

    1. Spring boot简介 主要用来简化spring开发,快速地创建独立的spring项目,并且与云计算天然集成. 2. @Controller  标记一个类是Controller . 3. @ ...

  8. 串行FLASH文件系统FatFs---转自野火论坛

    为了支持长文件名,需要用到FATFS源码中的cc936.c的两个函数ff_convert,ff_wtoupper:这里面直接用了两个大数组(127KB)来做unicode转gbk(OEM)的对照表,这 ...

  9. 用包来组织模型 -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 在我们使用python manage.py ...

  10. 【原创】JAVA8之妙用Optional解决NPE问题

    引言 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 user. ...