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 用途:事务开 ...
随机推荐
- SVN 命令符号详解
L abc.c # svn已经在.svn目录锁定了abc.c M bar.c # bar.c的内容已经在本地修改过了 M baz.c # baz.c属性有修改,但没有内容修改 X 3rd_party ...
- [BZOJ3669]魔法森林
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- linux下安装sphinx
1.下载sphinx源码包 上面截图的这个网址 复制链接地址 在putty终端使用:wget http://sphinxsearch.com/files/sphinx-2.3.1-beta.t ...
- Linux 动态链接库包含静态链接库的方法
今天老司机们在讨论一个编译问题 A是一个静态库 C是一个动态库 B是运行程序,能不能将A打包到C 然后B只需要链接C 就可以了. 这个问题我以前在出来zlib库版本冲突的时候有点印象,所以写了个 ...
- 【semantic segmentation】Pyramid Scene Parsing Network(转)
论文地址:https://arxiv.org/pdf/1612.01105.pdf源码地址:https://github.com/hszhao/PSPNet 来自:Semantic Segmentat ...
- jmeter-负载
主: remote_hosts=10.0.70.35:1099,10.0.70.47:1099 server.rmi.localport=1099 从: remote_hosts=10.0.70.3 ...
- 修改sublime侧边栏的颜色
Ctrl+Shift+P -> install -> 搜索安装包SyncedSidebarBg,自动同步侧边栏底色为编辑窗口底色.
- placehold.it-在线图片生成器
placehold的介绍 当我们进行网页设计时,经常会使用各种尺寸的图片.有时候我们用一个固定宽和高的div来进行代替,可是这样的效果不是很明显,而且还要进行各种各样的文字说明:或者我们得从网上寻找各 ...
- 终于搞懂了shell bash cmd...
问题一:DOS与windows中cmd区别 在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分, ...
- 微信小程序------联动选择器
picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. 先来看看效果图: 1:普通选择器 m ...