redis事务浅析
事务可以简单理解为:把多件事当做一件事情处理,要么一起成功,要么一起失败。在Spring中可以配置一个事务管理器,然后在要进行事务处理的方法上添加@Transactional注解就可以了。
对于redis事务,无外乎如此,有时候为了同时处理多个结构,会向redis发送多个redis命令。使用redis事务可以保证一个客户端在不被其他客户端打断的情况下执行多个redis命令。
对于redis事务,我会从以下方面介绍:
- 什么是Redis的事务
- redis事务涉及的命令与用法
- 如何实现redis事务
什么是redis事务
redis中的事务是一组redis命令的集合,开启redis事务后,这组redis命令会当做一个原子操作被redis执行。
通过将一个个redis命令发送给redis,再由redis执行这些命令。发送给redis的这组命令并不会立即执行,只有当客户端通知redis可以执行了才会开始执行并将执行结果返回客户端。
与关系数据库中可以回滚的事务不同在于,redis事务中被MULTI和EXEC包裹的命令会一个接一个地执行,直到所有命令都执行完毕。当一个事务处理完毕,才会处理另一个客户端的命令。
也就是说,redis事务是针对一个客户端而言的,所以在redis分片部署模式下是不能处理事务的。
redis事务命令与用法
包括MULTI、EXEC、WATCH、UNWATCH和DISCARD。
MULTI:开始一个事务
EXEC:提交事务执行
WATCH:监视一个或多个key的变化,一旦有一个key发生了变化,之后的事务就不会执行,监视持续到EXEC命令
UNWATCH:取消WATCH命令对key的监视。每个客户端只会取消自己WATCH的key,而不会对其他客户端有影响
DISCARD:取消WATCH命令对key的监视并清空已入队命令
如何实现redis事务
演示如下:

首先监视key的变化,之后修改key的值为value2,然后开启事务,修改key的值为value3,使用EXEC提交事务执行,最后失败了。重新获取key的值为value2,说明事务执行失败。执行EXEC后会redis队列事务命令清空并自动取消对WATCH的key的监视,效果等同于DISACRD,这也是为什么EXEC后不需要执行DISCARD命令的原因。
假如redis事务中有命令出现语法错误,那么执行EXEC会直接返回结果连语法正确的命令也不会执行。
假如redis事务中出现了运行时错误,那么redis会忽略运行错误的redis命令,继续执行出错命令之后的命令。
redis事务浅析的更多相关文章
- 探索Redis设计与实现14:Redis事务浅析与ACID特性介绍
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
- REDIS 事务机制
基本事务操作: 任何数据库都必须要保证一种原子执行操作:最基本的原子执行操作肯定是需要提供: 举一个例子来说明: 当对某个Key 做一个统计: 可能不同的Client做它那部分的统计,一段时间后,服务 ...
- redis 事务
概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...
- (6)redis 事务
redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所 ...
- Redis事务的分析及改进
Redis事务的分析及改进 Redis的事务特性 数据ACID特性满足了几条? 为了保持简单,redis事务保证了其中的一致性和隔离性: 不满足原子性和持久性: 原子性 redis事务在执行的中途遇到 ...
- Spring Framework 中启动 Redis 事务操作
背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...
- 2016022612 - redis事务命令集合
参考地址:http://www.yiibai.com/redis/redis_transactions.html Redis事务由指令 MULTI 启动,以EXEC结束. 1.multi 用途:事务开 ...
随机推荐
- Python高阶函数(Map、Reduce、Filter)和lambda函数一起使用 ,三剑客
Map函数 map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例说明 比如我们有一个函数f(x)=x2,要把这个函数作用 ...
- Package Manager Console的使用
Find-Package PM> Find-Package autofac https://docs.microsoft.com/en-us/nuget/tools/ps-ref-find-pa ...
- 转载 - POJ分类很好很有层次感
from http://blog.csdn.net/zzycsx/article/details/49103451 OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2 ...
- Python类变量,实例变量,类方法,实例方法,静态方法的分析
Python作为动态语言,跟静态语言如c/c++有很大区别,其中的一个重要的特性就是Python的变量无需声明直接可用.同样,类的成员变量无需声明,直接可用.目的是为了动态语言跟灵活,在思路想到的时候 ...
- LintCode刷题指南:字符串处理(C++,Python)
题目:两个字符串是变位词 题目难度:简单 题目描述: 写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 解题思路: C++:引入哈希的思维,这道题就 ...
- findContours函数参数详解
http://blog.csdn.net/dcrmg/article/details/51987348
- 引发事件代码封装成OnEventName
引发事件的代码,通常可以封装成“On+事件名称”的方法(On:表示当“什么什么”的时候),如下所示: 1:引发事件代码: if (PropertyChanged != null)//为了实现将数据源的 ...
- Android和iOS中Cocos2dx的横屏竖屏设置
一.横屏.竖屏设置 1.android AndroidManifest.xml文件中, screenOrientation="landscape" 为横屏, screenOrien ...
- Android我的便签-----SQLite的使用方法
在Android开发中也有数据库的存在,最近有空,把以前写的一个便签来讲述一下Android中的数据库,跟大家分享分享的,希望对大家有所帮助. SQLite简介 SQLite,是一款轻量级的关系型数据 ...
- windows使用pip安装selenium报错问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 7: ordinal not in range(128) 这是 ...