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 ...
随机推荐
- python day06
深浅拷贝 1.值拷贝 ls1 = [1,2,3] ls2 = ls1 #ls2直接把栈区里ls1存的地址拿过来,也指向堆区里列表的id #原列表发生ls1改变(不是重新赋值),ls2也跟着发生改变 2 ...
- Python-异常处理-66
异常和错误 # 1/0 # name # 2+'3' # [][3] #{}['k'] try: ') # 1/0 ') # name # 2+'3' # [][3] # {}['k'] ret = ...
- Riccati方程(微分方程)
形如:$$\frac{dy}{dx}=P(x)y^{2}+Q(x)y+R(x)$$ 其中P(x).Q(x).R(x)是连续可微函数 或形如 $$\frac{dy}{dx}=ay^{2}+\frac{k ...
- Virtual DOM 系列三:Diff算法
DOM操作是昂贵的,为了减少DOM操作,才有了Virtual DOM.而Virtual DOM的关键就是通过对比新旧vnode,找出差异部分来更新节点.对比的关键算法就是Diff算法. 历史由来: d ...
- IIC时序操作24C02芯片
1.心血来潮看自己能不能参考时序图重新写一个IIC驱动,加强一下时序图的理解.记录下来,以后遇到此类的IIC时序的芯片可以直接操作. 先说说自己参照手册来写AT24c02的IIC低层驱动,从写完到最后 ...
- ShoppingCart
数据库设计 表结构 [dbo].[AdminInfo] AdminID, AdminName, AdminPassword, RoleID [dbo].[BK_Car] ID, CarID, ISBN ...
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- [SCOI2009]生日礼物题解
题目 一道模拟和队列题,但模拟比队列的成分多一些.队列也就是用两个指针模拟的. 可以用枚举的思想.首先我们知道r(即区间的右端点是肯定不会左移的),而l右移的同时,r可能不变,也可能右移,所以这样就可 ...
- youtube上一些随手就来的牛逼颜色
网页背景色: 白色背景 #f6f5f7:替代了原来的纯白,不那么刺眼,很和谐 黑色背景 #262626:一种很好看的黑色背景 其他颜色: 圆形边框线:#ddd;
- DDCTF-2019
Web 滴 Web 签到题 Web 大吉大利,今晚吃鸡 1)滴 网址http://117.51.150.246/index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz ...