一、mysql 和 redis 的区别

1. 数据类型

  • mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
  • redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

2. 本质区别

  • Redis
    基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,而内存成本较高;

  • MySQL
    基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高;

web 应用中一般采用 MySQL+Redis 的方式,web应用每次先访问 Redis,如果没有找到数据,才去访问MySQL。


二、redis 优缺点及使用场景

1. 使用redis有哪些好处?

  • 速度快,因为数据存在内存中

  • 支持丰富数据类型,支持string,list,set,sorted set,hash

  • 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

2. redis 相比memcached 有哪些优势?

  • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

  • redis的速度比memcached快很多

  • redis可以持久化其数据

3. redis 常见性能问题和解决方案

  • Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

  • 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

  • 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

  • 尽量避免在压力很大的主库上增加从库

  • 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

4. redis 最适合的场景

  • 会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

  • 全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端

此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

  • 队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言 Python 对 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。

  • 排行榜、计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

  • 发布、订阅

发布/订阅的使用场景确实非常多。人们常在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统。

三、MySQL 优缺点及使用场景

1. 优点

  • 体积小、速度快、总体拥有成本低,开源;

  • 支持多种操作系统

  • 是开源数据库,提供的接口支持多种语言连接操作 ;

  • MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用CPU;

  • MySql 有一个非常灵活而且安全的权限和口令系统。当客户与 MySql 服务器连接时,他们之间所有的口令传送被加密,而且 MySql 支持主机认证;

  • 支持ODBC for Windows, 支持所有的ODBC 2.5函数和其他许多函数, 可以用 Access 连接 MySql 服务器, 使得应用被扩展;

  • 支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改;

  • 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;

  • MySQL 同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如 C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL 可用于 Unix,Windows,以及 OS/2 等平台,因此它可以用在个人电脑或者是服务器上。

2. 缺点

  • 不支持热备份;

  • MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用 mysqladmin 来重读用户权限时才发生改变;

  • 没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;

  • MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或linux 自行安装 免费 、Unix或Linux 第三方安装收费。

3. 应用场景

  • web网站系统
    web站点,是mysql最大的客户群,也是mysql发展史的中流砥柱,因为安装配置简单和开源免费
  • 数据仓库系统
  • 日志记录系统
  • 嵌入式系统
    嵌入式环境对软件系统最大的限制是硬件资源非常有限,而 mysql 在硬件资源的使用方面可伸缩性非常强,而且mysql 有专门针对嵌入式环境的版本等
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐