redis多级缓存

1,596 阅读2分钟

为什么需要缓存在这里就不赘述了,我们来说说多级缓存

从效率角度出发:

一般而言,本地缓存(local cache) 的效率与集中式缓存(redis)的性能可以差4个数量级(0.00001344ms,0.4437ms)

本地缓存(local cache)

优点: local cache有着极大的性能优势(占用内存,容量小,结构简单),单机情况下local cache会有很大效率提升。

缺点: 占用内存,容量小,结构简单,集群环境会出很多问题,如同步,解决方案如ehcache,大致原理是消息多播机制。

集中式缓存

优点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启可再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。同时支持数据的备份,即master-slave模式的数据备份。对敏感性高的数据直接使用集中式缓存,减低复杂度.

缺点: 配置要求高,维护成本高

\

分布式缓存和多级缓存的目的都是为了给数据库减负,写缓存需要一层一层的写,一般而言先写本地缓存再写集中式缓存。

从缓存颗粒角度出发:

页面级别

也叫url级别缓存,将页面手动渲染到存到redis,下次请求直接走redis

对象级别

将处理过的对象存入redis,下次直接从redis中拿

\

缓存更新的方式(针对数据没有变化的数据)

懒加载:读取时写入缓存 。

优点: 实现简单

缺点: 可能导致缓存一次都无法命中,或者雪崩

补充式: 将过期缓存放入队列当中,定期扫描。

优点:异步,对数据库影响相对较小,削平并发的波峰。

缺点:消息一旦积压会造成同步延迟,引入复杂度。

定时器: 定时将数据写入缓存。

优点:保证所有数据最小时间差同步到缓存中,延迟很低。

缺点:需要一个任务调度框架,复杂度提升,且要保证任务的顺序。方案维护成本高。可以使用mq或者其他异步任务调度框架。