redis学习(四)redis事务
redis事务
1.redis事务介绍
  redis的事务可以理解为一系列串行命令的集合。redis的事务和单条命令一样,都是redis的最小执行单位,因此一个事务内的命令,要么全部执行,要么全部不执行。事务的概念对于熟悉数据库的人们并不陌生,而redis作为一个数据库系统,也对事务进行了一定的支持。
			  redis实现事务的方式简单来说是将一系列的命令先保存在一个队列中,然后交给redis串行化的顺序执行。
2.redis事务常用命令
2.1 MULTI(开启事务)
MULTI命令:用于开启redis事务。在同一个客户端内,一旦开启了事务,代表着进入了事务状态,后续输入的所有命令都将被加入事务命令队列,而不是立即执行。
2.2 EXEC(提交事务)
EXEC命令:用于提交事务。提交事务代表着将当前事务命令队列中的命令交给redis一并执行。
2.3 DISCARD(放弃事务)
DISCARD命令:用于放弃事务。放弃事务代表着销毁当前事务命令队列,不进行任何操作,同时当前客户端退出事务状态。
2.4 WATCH
WATCH命令:用于监视key的变化。由于redis支持多用户,通常在执行事务的过程中,不希望其它的用户修改我们正在操作的key。redis出于并发性能的考虑,不支持悲观锁的机制(通过阻塞或者报错来阻止其它用户修改上锁的数据),而是采用了类似乐观锁的机制。redis提供了WATCH命令来实现事务的“检查再设置”(CAS)行为,WATCH命令可以同时监听多个key的变化,在事务执行过程中一旦发现被监听的key被修改过,将会放弃执行事务,这时应该由用户来进行重试。
2.5 UNWATCH
UNWATCH命令:用于解除WATCH状态。UNWATCH之后,当前客户端将解除所有的WATCH监听。
3.redis事务——错误处理
在事务执行过程中可能会出现错误,redis将错误分为两类区别对待。
1.语法错误(编译时错误)
语法错误,即redis执行的命令本身就是错误的,这类错误可以在事务真正执行之前就被发现,例如参数不符合规范等。如同通用编程语言的编译时错误,由于这样的错误应当通过仔细的检查来完全避免,因此,redis在发现事务中存在语法错误时,会直接放弃整个事务。
2.非语法错误(运行时错误)
非语法错误,即redis无法在真正执行命令之前发现的错误。例如"incr"命令要求数据必须是数字类型,而是否是数字类型,取决于运行时的状态。如同通用编程语言的运行时错误,这样的错误通常无法完全避免,因此,redis在发现命令存在非语法错误时,不会影响事务中其它命令的正常执行。
4.redis事务和脚本
redis在2.6版本后提供了非常灵活的脚本功能。脚本和事务类似,同样可以理解为一连串命令的执行,redis会将脚本一口气串行的执行完。redis脚本比事务更加的强大,事务能完成的任务,脚本也能完成。但相对而言,比起编写复杂的脚本,redis本身的事务特性是最简单的。
5.redis事务总结
redis作为一款非关系型数据库服务器,对事务的支持是远远比不上传统的关系型数据库的。redis事务不支持回滚,对事务ACID特性的支持也不尽如人意。但正因为redis功能的简单性,redis拥有极高的可用性。所以在实际业务选型时,应该扬长避短,不去过分依赖redis的事务特性,而是充分利用redis的高可用性,对于一些对事务要求很高的场合,转而使用传统的关系型数据库来满足需求。
redis学习(四)redis事务的更多相关文章
- Redis学习四:解析配置文件 redis.conf
		
一.它在哪 地址: 思考:为什么要将它拷贝出来单独执行? 二.Units单位 1 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 2 对大小写不敏感 三.INCLUDES包 ...
 - Redis学习笔记(7)-事务
		
package cn.com; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis. ...
 - redis学习四 复制
		
1,单机创建多实例 一个redis服务器安装多个redis实例,每个实例对应一个端口.默认端口是6379. 将redis.conf配置文件复制一份到另外一个文件夹下,然后修改其中的信息即可. pi ...
 - Redis学习四(运维指南).
		
一.上线规划 一般 redis 的参数配置都在 redis.conf 中,在上线前根据实际环境配置好合适参数,能有效提高 redis 的可用性. redis 的运行机器 CPU 不求核数多,但求主频高 ...
 - redis学习之——redis.conf配置(基本)文件学习
		
# Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...
 - Redis学习笔记~Redis主从服务器,读写分离
		
回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布 ...
 - redis学习笔记-redis的安装
		
Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...
 - Redis学习笔记-Redis内部数据结构
		
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...
 - Redis学习手冊(事务)
		
一.概述: 和众多其他数据库一样,Redis作为NoSQL数据库也相同提供了事务机制. 在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石. 相 ...
 - Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
		
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
 
随机推荐
- centos网络配置(手动设置,自动获取)的2种方法3
			
不知道为什么最近一段时间网络特别的慢,还老是断,断的时候,局域网都连不上,当我手动设置一下ip后就可以了,搞得我很无语.下面是2种设置网络连接的方法,在说怎么设置前,一定要做好备份工作,特别是对于新手 ...
 - 【MySQL】死锁问题分析
			
1.MySQL常用存储引擎的锁机制: MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 ...
 - ASP.NET Web API 框架研究 Action的选择
			
如何从HttpController众多方法里如何选择出有效的Action方法?主要分一下几个步骤: 首先,获取候选HttpActionDescriptor列表(ILookup(string,HttpA ...
 - Python:windows下scikit-learn 安装和更新
			
scikit-learn 报错: from sklearn.model_selection import train_test_split ImportError: No module named m ...
 - 【Win】Clso QR Tool 二维码小工具
			
一个可以生成并识别二维码的windows小工具,纯绿色.不含糖. 可以通过输入文本生成二维码,或者加载本地图片.剪贴板内的图片,直接解析出二维码内容. 支持自定义LOGO. 下载文件 (当前版本:1. ...
 - 背水一战 Windows 10 (53) - 控件(集合类): ItemsControl 的布局控件 - ItemsStackPanel, ItemsWrapGrid
			
[源码下载] 背水一战 Windows 10 (53) - 控件(集合类): ItemsControl 的布局控件 - ItemsStackPanel, ItemsWrapGrid 作者:webabc ...
 - 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation
			
[源码下载] 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation 作者:webabcd 介绍背水一战 Wind ...
 - Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
			
一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...
 - Java Calender 类详解
			
一. 如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar ...
 - CE修改器使用教程 [基础篇]
			
Cheat Engine 是一款内存修改编辑工具 ,它允许你修改你的游戏或软件内存数据,以得到一些其他功能.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能, ...