Redis 设计与实现 (七)--事务
事务
*ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
redis 通过multi exec watch 实现事务
- 事务开始
- 命令入队
- 事务执行
一、事务开始-- mulit
mulit 标志事务开始,将客户端从非事务状态切换到事务状态
# redis-cli
127.0.0.1:> multi
OK
127.0.0.1:> set sc 'sc-001'QUEUED
127.0.0.1:> set sc 'sc-002'QUEUED
127.0.0.1:> set sc 'sc-003'QUEUED
127.0.0.1:> get scQUEUED
127.0.0.1:> exec
) OK
) OK
) OK
) "sc-003"
127.0.0.1:>
二、命令入队
客户端-非事务状态:输入的命令立即执行
客户端-事务状态:输入命令exec discard watch mulit 会立即执行,其他不立即执行,而将命令入队等待执行。
三、事务执行--exec
exec 命令 执行事务。遍历事务命令队列,执行所有命令返回客户端。
四、watch命令
乐观锁 -- exec执行前,监视的键只要有修改,拒绝执行事务。返回客户端空回复
修改命令执行后会将客户端的REDIS_DIRTY_CAS标识打开,标志客户端的事务安全性被破坏。
五、Redis事务ACID性质
1、原子性,要不都执行,要不都不执行。redis不支持回滚机制。
2、一致性,因为redis对错误命令不执行,所以数据库可以避免没有非法或者无效数据。
入队错误、执行错误、服务器停机
3、隔离性,redis是单线程方式执行事务,事务有隔离性。
4、耐久性,redis开启了持久化,那么事务也会持久化到硬盘。
Redis 设计与实现 (七)--事务的更多相关文章
- 探索Redis设计与实现14:Redis事务浅析与ACID特性介绍
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- Redis | 第8章 发布订阅与事务《Redis设计与实现》
目录 前言 1. 发布订阅 1.1 频道的订阅与退订 1.2 模式的订阅与退订 1.3 发送消息 1.4 查看订阅消息 2. 事务 2.1 事务的实现 2.2 WATCH 命令的实现 2.3 事务的 ...
- Redis设计原理简介
学完MySQL InnoDB之后,又开始学习和研究Redis. 首先介绍下书:<Redis设计与实现>第二版 黄健宏著,机械工业出版社,388页,基于redis3.0版本.版本有点低,这个 ...
- 《Redis设计与实现》知识点目录
Redis设计与实现 第一部分 数据结构与对象 第二章 简单动态字符串 p8 简单动态字符串SDS 2.1 SDS的定义 p9 每个sds.h/sdshdr结构表示一个SDS值 2.2 SDS与C字符 ...
- Redis设计与实现(一~五整合版)【搬运】
Redis设计与实现(一~五整合版) by @飘过的小牛 一 前言 项目中用到了redis,但用到的都是最最基本的功能,比如简单的slave机制,数据结构只使用了字符串.但是一直听说redis是一个很 ...
- 《Redis设计与实现》读书笔记
<Redis设计与实现>读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作: 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少: 阅 ...
- Redis设计与实现:读书笔记之二
1.数据库 Redis服务器一般包含多个db,默认16个. 切换数据库 每个redis客户端都有自己的目标数据库,默认为0,可以通过select 1,切换数据库. 设置键的生存周期和过期时间 PTTL ...
- 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务
在 <企业应用架构模式> 中 提到了 乐观锁定, 用 时间戳 来 判定 交易 是否有效, 避免 传统事务 的 表锁定 造成 的 瓶颈 . 在 现在的 大并发 的 大环境下, 传统事务 及其 ...
- 《Redis设计与实现》
<Redis设计与实现> 基本信息 作者: 黄健宏 丛书名: 数据库技术丛书 出版社:机械工业出版社 ISBN:9787111464747 上架时间:2014-6-3 出版日期:2014 ...
随机推荐
- linux系统监控工具
Linux性能监控工具 top 提供运行系统的动态实时视图.显示系统摘要信息以及任务列表 uptime 显示系统平均负载 ps.pstree 提供当前进程列表 free 显示系统中空 ...
- DDD - 概述 - 模块 (二)
首先,你必须知道以下DDD构建块: Entities - 实体 Value objects - 值对象 Aggregate roots - 聚合跟 Repositories - 仓储对象 Factor ...
- 利用Google趋势来预测比特币价格 - 续1
之前发布了一篇文章利用Google趋势来预测比特币价格,说到了看到一篇文章很朴素的介绍了google趋势和比特币价格的一个关系.觉得很简单直白,就根据那个模型写了个程序,部署起来了,从十一月十四号到现 ...
- 在同一个Apache服务器软件上部署多个站点的基础方法
这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下(http:// ...
- ES6的 let const 以及块级作用域
let声明变量 用法类似于var,但是所声明的变量只在let所在的代码块内有效. 1 . 在ES6环境下,let声明的变量不能在声明之前调用. 例: console.log(i); //会报错,这叫做 ...
- jenkins里用ansible发布代码常见的问题
1.stdout: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined cd bin/vi catalina. ...
- 前端axios下载excel无法获取header所有字段问题
后端设置header后,前端无法获取到其他字段,只需要在服务器端header里面设置 Access-Control-Expose-Headers: Content-Disposition
- company_base_info_staff_job
"company_base_info_staff_job": { "engine": "python script", # datax or ...
- VB.NET或C#报错:You must hava a license to use this ActiveX control.
VB.NET或者C# winform开发时,如果使用了Microsoft Visual Basic 6.0 ActiveX,并动态创建该控件实例,那么程序移植到没有安装Visual Basic 6.0 ...
- 性能之ab简单使用
ab是apache自带的性能测试工具,他所有关注的请求返回的状态码(2XX),不关心后续处理过程,所以测试时间很小,严重依赖CPU颗粒数 一.进入ab存放的目录执行./ab.其中/ab [option ...