一、含义
1、mysql的运行机制
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作。
如果反复频繁的访问数据库。
第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;
第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
2、redis
①:redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。
②:一般都是用redis作缓存,只用来读数据(将数据库中的数据读出来放到redis,下一次读取时取redis中的数据),而mysql则用来做数据的持久话
③:执行过程:当需要查询数据时,先在redis缓存中找对应的键值对,若不存在,则执行对应的sql,然后再把查询的sql结果放到redis的缓存中
④:Redis和memcached,都是缓存数据库,可以大大提升高数据量的web访问速度。但是memcached只是提供了简单的数据结构string,而Redis的value可以是string、list、set、hash、sorted set这些,功能更加强大。
3、缓存
缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。
二、区别
比较 | mysql | redis |
---|---|---|
类型 | 关系型数据库 | 缓存型数据库 |
属性 | 一个中小型的网络数据库,比oracle和sqlserver小, 但是并发能力远超过acess这样的桌面数据库。 | 支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。可以认为redis比mysql简化很多。 |
存储方式 | 持久化存储 | (缓存或持久化存储)在于mysql结合中一般redis用来做缓存 |
存储位置 | 磁盘上 | 内存中 |
作用 | 存放持久化数据,将数据存储在硬盘中 | 用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率 |
优点 | 访问速度快 | |
缺点 | 读取速度较慢 | 保存时间有限 |
三、使用
web应用中一般采用MySQL+Redis的方式,web应用每次先访问Redis,如果没有找到数据,才去访问MySQL
redis性能好,快,并发高,但不能处理逻辑,而且不支持事务,主要做数据缓存,减少mysql数据库的压力;
redis达到最大内存限制后,会导致所有写命令失败。所以一定要做好持久化和容量预估;
四、如何解决mysql、redis读写一致性的问题?
其实只把redis当作缓存的话是不存在写一致性的问题;
(1)读操作:在读取数据时,先从redis中读取数据,如果redis不存在,再到DB中去读数据;
(2)插入操作:redis只用来作缓存,不参与写操作,直接对数据库进行插入、修改操作,避免了脏数据;
(3)修改操作:修改操作是会影响读一致性的问题,具体的思路是,修改时修改DB的数据,然后设置redis缓存无效;
若能保证这三个的一致性,则就能保证redis+mysql的读写一致性;