一、什么是redis事务?

  可以一次性执行多条命令,本质上是一组命令的集合。一个事务中的所有命令都会序列化,然后按顺序地串行化执行,而不会被插入其他命令

二、Redis 事务可以做什么?

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

三、怎么使用 redis 命令?

  1、事务相关的命令:

    (1)DISCARD:取消事务,放弃执行事务块中的所有命令

    (2)EXEC:执行事务块中的命令

    (3)MULTI:标记一个事务的开始

    (4)UNWATCH:取消WATCH命令对所有 key 的监视

    (5)WATCH key [key...]:监视一个(或多个)key,如果在事务之前执行这个(或者这些)key被其他命令所改动,那么事务将会被打断。

  2、事务报错问题:

    (1)语句错误:会直接在添加队列的时候报错,如果出现这个错误,则整个事务都会回滚

    (2)逻辑错误:例如给一个字符串 + 1,在执行的时候才会报错。这种错误则不会影响事务中的其他操作,只有本条会报错

  3、watch 监控:
    (1)乐观锁:

        乐观锁(Optimistic Lock),是一个乐观的锁,每次去拿数的时候都认为别人不会对数据进行修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用“版本号”等机制,乐观所使用于多读的应用类型,这样可以提高吞吐量。

      乐观所策略:提交版本必须大于当前记录的版本,才可以进行更新

    (2)悲观锁

        悲观锁(Pessimistic Lock)们就是一个很悲观的锁,每次去拿数据的时候会认为其它人会根据修改操作,导致覆盖等问题。所以每次在拿数据的时候都会上锁,这样如果别人想要拿数据,就会 block ,一直到修改完之后,解开锁菜可以使用,传统的关系醒数据库里边就用了很多这种锁的机制,比如行锁,表锁,读锁,写锁,这都是在做操作之前,先对表上锁。

      悲观锁保证数据安全,但是会使性能下降

四、三特性

  1、单独的隔离操作:

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

  2、没有隔离级别的概念:

    队列中的命令没有提交之前不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到是物理的更新,在事务外查询不能看到这个问题了”

   3、不保证原子性:

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

    (除非加入队列的时候就出错,即类似 java 的编译时异常和执行时一异常,编译时会导致回滚,执行时异常不回滚)

    

什么是redis事务的更多相关文章

  1. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...

  2. Redis学习笔记(4) Redis事务、生存时间及排序

    1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...

  3. REDIS 事务机制

    基本事务操作: 任何数据库都必须要保证一种原子执行操作:最基本的原子执行操作肯定是需要提供: 举一个例子来说明: 当对某个Key 做一个统计: 可能不同的Client做它那部分的统计,一段时间后,服务 ...

  4. redis 事务

    概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...

  5. (6)redis 事务

    redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所 ...

  6. Redis事务的分析及改进

    Redis事务的分析及改进 Redis的事务特性 数据ACID特性满足了几条? 为了保持简单,redis事务保证了其中的一致性和隔离性: 不满足原子性和持久性: 原子性 redis事务在执行的中途遇到 ...

  7. Spring Framework 中启动 Redis 事务操作

    背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...

  8. 2016022612 - redis事务命令集合

    参考地址:http://www.yiibai.com/redis/redis_transactions.html Redis事务由指令 MULTI 启动,以EXEC结束. 1.multi 用途:事务开 ...

  9. 2016022606 - redis事务

    Redis事务 Redis事务让一组命令在单个步骤执行.事务中有两个属性,说明如下: 1.在一个事务中的所有命令按顺序执行作为单个隔离操作.通过另一个客户端发出的请求在Redis的事务的过程中执行,这 ...

  10. Redis事务和分布式锁

    Redis事务 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行.Redis事务的实现需要用到 MUL ...

随机推荐

  1. nodejs--wechat模块,微信公共平台自动回复消息接口服务中间件

    npm 程序官网 https://www.npmjs.com/package/wechat 别人使用笔记网址 https://blog.csdn.net/golduty2/article/detail ...

  2. React的React.createContext()源码解析(四)

    一.产生context原因 从父组件直接传值到孙子组件,而不必一层一层的通过props进行传值,相比较以前的那种传值更加的方便.简介. 二.context的两种实现方式 1.老版本(React16.x ...

  3. Atcoder Beginner Contest 147D(按位处理)

    把每个数字每一位上二进制数字取出,求答案时直接用N个数里这一位是0的个数乘上这一位是1的个数然后乘上二的这一位次方,注意所有可能溢出的地方都要对mod取模. #define HAVE_STRUCT_T ...

  4. zabbix-agent不能启动:配置文件出现特殊字符导致

    问题如下: 定位查找问题: 命令:journalctl  -xe [重点] 图中可见错误信息在zabbix_agent配置文件中的“hostname=”中不能出现特殊字符,我出错的原因是写成了:hos ...

  5. 每天进步一点点------基础实验_12_有限状态机 :Moore型序列检测器

    /********************************************************************************* * Company : * Eng ...

  6. python-用正则表达式筛选文本信息

    [摘要]  本文主要介绍如何对多个文本进行读取,并采用正则表达式对其中的信息进行筛选,将筛选出来的信息存写到一个新文本. 打开文件:open(‘文件名’,‘打开方式’)>>>file ...

  7. 6_12 油田(UVa572)<图的连通块DFS>

    有一家石油公司负责探勘某块地底下的石油含量,这块地是矩行的,并且为了探勘的方便被切割为许多小块.然后使用仪器对每个小块去探勘.含有石油的小块称为一个pocket.假如两个pocket相连,则这两个po ...

  8. STM32F103之GPIO学习记录

    9 GPIO:通用I/O口 AFIO:可供选择的I/O口 9.1 GPIO功能描述 每一个通用的I/O口都有: 两个32位的配置寄存器(配置寄存器低和配置寄存器高): 两个32位的数据寄存器(输入数据 ...

  9. hackinglab 种族歧视

    首先打开题目 发现是禁止访问的然后打开后台 发现后台也没有什么有用的信息所以用bp抓包 然后修改一下国家语言

  10. localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

    在开启hadoop时候报错:localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 此时 ssh ...