mysql和redis的区别

mysql和redis的区别

扫码添加渲大师小管家,免费领取渲染插件、素材、模型、教程合集大礼包!

大家好,今天来介绍mysql和redis的区别(redis和mysql的区别对比)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!

redis和mysql的区别(mysql+redis)

redis和mysql的区别非常大

具体如下:mysql中一个中小型的网络数据库,比oracle和sqlserver小,但是并发能力远超过acess这样的桌面数据库

redis是一个支持网络、可基于内存亦可持久化的日志型、Key-Value数据库

可以认为redis比mysql简化很多

mysql支持集群

现在大量的软件使用redis作为mysql在本州闷地的数据库缓存,然后如悄再适当的时候和mysql同渣迹渣步

redis和mysql区别

1、类型不同

MySQL是关系型数据库;而Redis是非关系型数据库。

2、作用不同

mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。

redis用于存储使用较为频繁的数据到缓存中,读取速度快。

3、存储类型不同

redis存储的是key-value格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶。Redis会比MySQL快一点点。

mysql数据存储是存储在表中,查枯液找数据时要先对表进行全局扫描或者根据索引查找,这涉及到卜芹磁盘没弊物的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。

redis┃面试官问我redis事务和mysql事务的区别我

1、前言

面试官:我看你简历上写了熟悉redis,看来工作中用的很多吧?

我:是的,我们项目中经常用到redis(来,随便问,看我分分钟秒杀你)

面试官:那你给我说说redis的事务和mysql的事务有什么区别吧

我:额。。。事务还有区别????

面试官:比如说redis的事务是不支持原子性和持久性的,包括他们的实现原理等方面也是有很大区别的。

我:学到了。。。。。。

2、正文

事务的四大特性

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

说的是一个事物内所有操作就是最小的一个操作单元,要么全部成功,要么全部失败。这是最基本的特性,保证了因为一些其他因素导致数据库异常,或者宕机。

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。

一致性有下面特点:

在现实中,事务系统遭遇并发请求时,这种串行化是有成本的, Amdahl法则描述如下:它是描述序列串行执行和并发之间的关系。

“一个程序在并行计算情况下使用多个处理器所能提升的速度是由这个程序中串行执行部分的时间决定的。”

大多数数据库管理系统选择(默认情况下)是放宽一致性,以达到更好的并发性。

事物的隔离性,基于原子性和一致性,因为事物是原子化,量子化的,所以,事物可以有多个原子包的形式并发执行,但是,每个事物互不干扰。

但是,由于升余多个事物可能操作同一个资源,不同的事物为了保证隔离性,会有很多锁方案,当然这是数据库的实现,他们怎么实现的,我们不必深究。

持久性,当一个事物提交之后,数据库状态永远的发生了改变,即这个事物只要提交了,哪怕提交后宕机,他也确确实实的提交了,不会出现因为刚刚宕机了而让提交不生效,是要事物提交,他就像洗不掉的纹身,永远的固化了,除非你毁了硬盘。

事务命令

mysql:

Begin:显式的开启一个事务

Commit:提交事务,将对数据库进行的所有的修改变成永久性

Rollback:结束用户的事务,并撤销现在正在进行的未提交的修改

redis:

Multi:标记事务的开始

Exec:执行事务的commands队列

Discard:结束事务,并清除commands队列

默认状态

mysql:

mysql会默认开启一个事务,且缺省设置是自动提交,即每成功执行sql,一个事务就会马上commit,所以不能rollback,

redis:

redis默认不会开启事务,即command会立即执行,而不会排队,并不支吵神滚持rollback

使用方式

mysql(包含两种方式):

用Begin、Rollback、commit显式开启并控制一个 新的 Transaction

执行命令 set autocommit=0,用来禁止当前会话自动commit,瞎野控制 默认开启的事务

redis:

用multi、exec、discard,显式开启并控制一个Transaction。

(注意:这里没有强调 “新的” ,因为默认是不会开启事务的)。

实现原理

mysql:

mysql实现事务,是基于undo/redo日志

undo记录修改前状态,rollback基于undo日志实现

redo记录修改后的状态,commit基于redo日志实现

既然是基于redo日志实现记录修改后的状态,那么大家应该也知道,redo日志是innodb专有的,所以innodb会支持事务

在mysql中无论是否开启事务,sql都会被立即执行并返回执行结果,只是事务开启后执行后的状态只是记录在redo日志,执行commit之后,数据才会被写入磁盘

(以上内容后面我会详细在mysql篇给大家讲到,大家可以先简单了解下)

所以,上述代码,insertSelective 将会被立即赋值(无论是否开启事务,只是结果或未被写入磁盘):

redis:

redis实现事务,是基于commands队列

如果没有开启事务,command将会被立即执行并返回执行结果,并且直接写入磁盘

如果事务开启,command不会被立即执行,而是排入队列,并返回排队状态(具体依赖于客户端(例如:spring-data-redis)自身实现)。

调用exec才会执行commands队列

以上代码如果没有开启事务,操作被立即执行,a将会被立即赋值(true/false)

如果开启事务,操作不会被立即执行,将会返回null值,而a的类型是boolean,所以将会抛出异常:

Redis事务不支持Rollback(重点)

事实上Redis命令在事务执行时可能会失败,但仍会继续执行剩余命令而不是Rollback(事务回滚)。如果你使用过关系数据库,这种情况可能会让你感到很奇怪。然而针对这种情况具备很好的解释:

redis 事务中的错误

事务期间,可能会遇到两种命令错误:

客户端会在EXEC调用之前检测第一种错误。 通过检查排队命令的状态回复(*注意:这里是指排队的状态回复,而不是执行结果*),如果命令使用QUEUED进行响应,则它已正确排队,否则Redis将返回错误。如果排队命令时发生错误,大多数客户端将中止该事务并清除命令队列。然而:

这是由于INCR命令的语法错误,将在调用EXEC之前被检测出来,并终止事务(version2.6.5+)。

EXEC命令执行之后发生的错误并不会被特殊对待:即使事务中的某些命令执行失败,其他命令仍会被正常执行。

分享到 :
相关推荐

Magento网站修改数据库密码后连接失败的解决方法

Magento是一套专业开源的电子商务系统。它设计地非常灵活。具有模块化架构体系和功...

怎么查香港的服务器地址(怎么查香港的服务器地址信息)

目前。香港服务器广泛使用的操作系统是Windows和Linux。下面介绍Window...

免备案服务器租用要注意哪些问题(免备案服务器租用要注意哪些问题呢)

免备案服务器租用要注意的问题有:1。注意购买免备案服务器前要试用。看服务商提供的是v...

法国服务器有哪些优势(法国服务器有哪些优势和劣势)

法国服务器的优势有:1。法国服务器带宽大。默认每台法国服务器提供1G的独享国际带宽。...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注