浅谈mysql与Redis关系

从报表到业务的循序渐进的了解,其中涉及到数据链路的过程。

前言:mysql与redis的区别一直是热点,下面就个人的了解进行简单阐述,如有问题,可多多交流。

总结这两者的区别时,先简单阐述一下关系型数据库与非关系型数据库的大框架关系:

part  one: RDS 与NoSQL的区别

 i) RDS(Relational Database Service,关系型数据库服务),阿里云关系型数据库是一种稳定可靠、可弹性伸缩的在线数据库服务。基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL、SQL Server、PostgreSQL、PPAS(Postgre Plus Advanced Server,高度兼容Oracle数据库)和MariaDB TX引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。

注:mysql是一种RDS关系型数据库,RDS包括mysql数据库。

ii) NoSQL(Not Only SQL)是相对应的一种非关系型数据库,包括Redis,MongoDB,HBase,Memcache(mc),Table Store等,其中最常用的是Redis,其逐渐代替了mc的地位。详细的一些分类如下:

浅谈mysql与Redis关系

注:redis是非关系型数据库中的一种。

 

part  two: mysql与redis的区别

Mysql是属于关系型数据库,所有的数据都储存在磁盘之中。该数据库发展时间长所以具备强大的功能,可以兼容不同的系统,方便操作转移而且支持大部分sql查询语句,有着灵活的权限和口令。并且开源免费。但是在进行检索的时候就是涉及到IO操作,使用IO调度器进行检索,该调度器也被称为电梯,必须一层一层的执行直到底部才能返回,从而大大的降低了运行速度。
 

Redis(非关系型数据库之一)是属于内存数据库,所有的数据都储存在内存中,所以执行增删改查等操作运行速度比Mysql相比快速很多,而且支持的数据类型也较全面,支持字符串,列表,hash,集合等。但是由于数据是保存在内存中,所以Redis不具备自动容错和恢复功能。该数据库在重启后会丢失数据,然而Redis有rdb持久化策略,储存数据后会自动生成rdb.dump文件,里面存放着每个数据库中的内容,在重启后会自动导入内容。
 

综合来讲这两种数据库的优势也是对方的缺点,所以在开发的时候会一块使用Mysql和Redis数据库,互相弥补对方的缺点,当用户请求的的时候,会先对Redis数据库进行检索,如果没有找到目标,才会对Mysql进行检索,很大程度的提高了检索速度。

 [redis与mysql的关系如同内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理。

  推理到redis+mysql,它是内存+磁盘关系的一个映射,mysql放在磁盘,redis放在内存,这样的话,web应用每次只访问redis,如果没有找到的数据,才去访问Mysql ]

备注: 

redis和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用redis而慢慢舍弃mc。