Mysql的数据都是存放在磁盘中的,虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存,一般针对的是查询的内容,而且力度也比较小,一般只有表中数据没有发生变更的时候,数据库中对应的缓存才会发挥作用。但这并不能减少业务系统对数据库产生的增删改查的IO压力。因此缓存技术应运而生,该技术实现了对数据库数据的高速缓存,提高业务响应速度,极大缓解后端数据库的压力。
一般在客户端和存储层之间加上一层缓存层。
客户端先向缓存层请求数据,如果缓存层有对应的数据,则直接返回数据给客户端;
缓存层如果没有请求的数据,到存储层去查询数据(穿透查询)。
在存储层找到了数据,会将数据回写回缓存层(回种),以便下次客户端可以直接从缓存层获取数据,并且将结果返回给客户端。
当发现存储层无法提供服务时,可以让客户端的请求直接打在缓存层上,不管有没有获取到数据,都直接返回(熔断)。
缓存中间件-Memcache和Redis的区别
Memcache:
优点:简单易用,代码层次类似Hash,可以通过Hash这个数据结构来实现
支持简单数据类型
缺点:不支持数据持久化存储。一旦服务器宕机,数据没有办法保存下来
不支持主从同步
不支持分片
Redis:
数据类型丰富
支持数据磁盘持久化存储
支持主从同步
支持分片
有持久化需求或者对数据结构和处理有高级要求的应用,选用Redis.
其他简单的key-value的存储选择Memcache。