mysql并发控制之数据库锁
1.mysql和redis的区别
mysql是一种关系型数据库,数据会最终存储在磁盘上。而redis是一种非关系型的nosql数据库,以key-value的形式存储数据,将数据存储在内存。从性能上来说,redis将数据存储在内存,性
能肯定要优于mysql数据库。但是从安全的角度来说,mysql数据存储在磁盘上更安全些。所以我们在项目中一般会将redis和mysql结合使用。
2.redis的事物
redis事物执行过程说明:redis对事物的支持比较简单,能够保证一个客户端发起的多个命令可以被连续的执行。我们清楚,在redis中和事物相关的关键字有multi(表示开启一个事物),
exec(表示执行一个事物),discard(表示回滚一个事物)。在一般情况下(没有开启事物),redis的client端发起一个命令到redis的server端,命令会直接执行并将结果返回给client。但是
当我们使用multi开启一个事物时,client每发出一个操作,server端会将这个命令放入到一个队列里面,直到客户端发出exec提交命令时,server端会将这些命令一次执行。并将执行的结果打包
发送到client,结束这个事物的执行。
我们清楚关系型数据库mysql的事物一般支持ACID,即原子性,一致性,隔离性,持久性原则,但是在redis中,这些原则并不都支持。
原子性:在上面的分析中,我们已经清楚,一个client端执行multi命令开启一个事物,会进入到一个事物的上下文,之后所有的命令会被放到执行队列,直到发出exec命令后,server端会依次
执行这些命令并将执行结果返回,并且释放上下文。但是在这里面有一个问题,就是当队列中有一个命令出现错误时,并不会发生回滚,而是会继续执行后面的命令。这就违背了事物的原子性原
则。这是redis事物存在的第一个问题。
一致性:
隔离性:redis在执行一个事物队列中的命令时,其它的client是无法执行命令的,所以它满足了隔离性。
持久性:通过前面对事物的分析,我们已经清楚redis的事物只不过是执行队列中存储的一系列的命令,执行完成之后数据依然存储在内存。它的持久性其实与事物并没有多大的关系,而是与我
们所设定的redsi的持久化方案有关。当我们没有启用redis的持久化时,所有数据都是存储在内存,当然不存在持久性。当我们使用rdb模式的持久化方案时,如果在redis事物执行完成之后到执
行rdb文件更新这段时间服务器出现问题,事物提交的数据的持久性也无法得到保证。当我们使用aof模式的持久化方案时,命令的执行由主线程来完成,持久化由后台线程来完成,但是主线程不
会阻塞等待后台线程完成任务后在执行,中间出现时间差,所以也不一定会保证持久性。
redis事物存在的问题:
1.无法满足原子性,队列中某条命令执行错误时,并不会回滚,而是会继续执行下面的命令。
2.假如我们在一个事物执行之前查询出一个key,然后在这个事物中对这个key执行加1的操作。但是我们在事物提交(exec)之前某个客户端对这个key做了修改,由此我们就无法达到我们的要
求。redis在这块所做的努力是引入watch机制,我们在获取key之前,对这个key执行watch命令,然后执行事物中,只要这个key发生任何的变化,这个事物不会执行成功。
mysql并发控制之数据库锁的更多相关文章
- MySQL 事物和数据库锁
1.数据库事物 1. 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一 ...
- 【数据库】mysql深入理解乐观锁与悲观锁
转载:http://www.hollischuang.com/archives/934 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时 ...
- [MySQL数据库之事务、读现象、数据库锁机制、多版本控制MVCC、事务隔离机制]
[MySQL数据库之事务.读现象.数据库锁机制.多版本控制MVCC.事务隔离机制] 事务 1.什么是事务: 事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻 ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- mysql的事务和数据库锁的关系
数据库加事务并不是数据就安全来了,事务和锁要分析清楚和配合使用 问题背景处于对高并发的秒杀环节的理解整理如下: 秒杀的时候高并发主要注意1.在秒杀的情况下,肯定不能如此高频率的去读写数据库,会严重造成 ...
- MySQL数据库锁类型
锁概念 : 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消 ...
- 【MySQL】锁——查看当前数据库锁请求的三种方法 20
MySQL提供了查看当前数据库锁请求的三种方法:1. show full processlist命令 观察state和info列 2. show engine innodb status\G ...
- 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...
- 看MySQL的参数调优及数据库锁实践有这一篇足够了
史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...
随机推荐
- Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
ant-design-pro ----> version :2.3.1 由于网上Ant Design Pro+Electron的资料太少,我就贡献一点经验 最近需要讲AntD Pro项目(以 ...
- java8 list转map,list集合中的元素的属性转set,list集合中对象的属性转list
一.使用java8对list操作 1.1list转map private Map<String, Member> getMemberMap() { List<Member> m ...
- upstream timed out (110: Connection timed out) while reading response header from upstream, client:
遇到的问题 之前没配置下面这段,访问时候偶尔会出现 504 gateway timeout,由于偶尔出现,所以不太好排查 proxy_connect_timeout 300s;proxy_read_t ...
- 使用原生 JS 复制文本兼容移动端 iOS & android
注意事项 使用 JS 实现复制功能并不是很难,但是有几个需要注意的地方. 首先文本只有选中才可以复制,所以简单的做法就是创建一个隐藏的 input,然后绑定需要复制的文本. 另外如果将 input 设 ...
- mondb 常用命令学习记录
mondb 常用命令学习记录 一.MongoDB 下载安装 MongoDB官网 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制 ...
- HSSFWorkbook 导出excel java
public String exportExcelList(){ //创建webbook,对应一个excel文件 HSSFWorkbook wb = new HSSFWorkbook(); //在we ...
- url全部信息打印
public String findAllContract(HttpServletRequest request,String a){ String string = new StringBuilde ...
- keras03 Aotuencoder 非监督学习 第一个自编码程序
# keras# Autoencoder 自编码非监督学习# keras的函数Model结构 (非序列化Sequential)# 训练模型# mnist数据集# 聚类 https://www.bili ...
- SSM框架整合环境构建——基于Spring4和Mybatis3
目录 环境 配置说明 所需jar包 配置db.properties 配置log4j.properties 配置spring.xml 配置mybatis-spring.xml 配置springmvc.x ...
- 【问题解决方案】Github中的jupyter notebook文件(.ipynb)加载失败/失败
两个方法: 法一:本机安装jupyter notebook的情况下直接下载文件并打开 本机打开的话会在浏览器中显示,地址为localhost:8888,也就是本机 法二:在线打开:利用 'https: ...