redis事务浅析
来源:互联网 发布:seo网站关键词优化 编辑:程序博客网 时间:2024/05/21 10:17
事务可以简单理解为:把多件事当做一件事情处理,要么一起成功,要么一起失败。在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事务和管道浅析
- Redis浅析
- Redis 事务
- redis事务
- Redis 事务
- redis--事务
- redis事务
- redis事务
- Redis事务
- redis 事务
- Redis事务
- Redis事务
- Redis 事务
- Redis 事务
- redis事务
- Redis 事务
- Redis 事务
- 异常处理以及引申
- Nginx服务器安装配置
- 一次让人难以忘怀的排查频繁Full GC过程
- ubuntu 14.04 交叉编译器的制作工具以及制作教程
- HDU题目分类
- redis事务浅析
- Java直接插入排序
- 6. ZigZag Conversion leetcode
- c++之this指针
- 二叉树的高度 、销毁、链表的翻转(k为一组、n-m 之间)两种实现、
- 函数的属性和方法
- MySQL数据库命令行详解
- Android实战中与Json数据、Java-Bean相关的效率技巧
- 文件归档及传输