缓存与数据库的数据一致性问题
1、cache Aside (先更新db,在删除缓存)
无侵入方案,使用canel通过binlog更新缓存
2、read/wirte Through
3、write Behind caching
缓存穿透、击穿、雪崩
缓存穿透:数据库不存在,方案:缓存空对象,布隆过滤器
缓存击穿:热key 失效 方案:热点数据用不过期,互斥锁
雪崩:大面积的失效 方案:高可用,限流降级,失效时间随机数
热点key发现与解决:
发现方法:redis 的monitor ,抓包,预估
处理方案:二级缓存,key分散
Bigkey发现与解决:
危害:内存不均匀,超时阻塞,网络阻塞
发现方法:redis 的参数可以统计
处理方案:拆散数据,缩小
数据倾斜
Redis脑裂
客户端缓存,网络缓存,服务器缓存
正向代理:squid
边缘缓存:cdn,varnish(Varnish是一款高性能的开源HTTP加速器)
数据库缓存:bufferpool
应用级缓存:escache
平台级缓存:redis
常见缓存算法
LRU 最近最少使用 LFU最不经常使用
缓存架构: