缓存同步机制整理
同步目的
使数据库数据和缓存中的数据在一定时间内保持一致
缓存形式
- 内存
- 文件(磁盘)
缓存更新的常用模式
- 预留缓存Cache-aside
访问数据库之前先检查缓存中是否有缓存,如果没有在数据库更新后更新缓存。
- 直读模式 Read-through
应用先查看缓存中是否有该数据,有则直接使用,如果没有,从数据库加载,然后放入缓存,下次以后再访问就可以直接从缓存中获得。
- 直写模式 Write-through
在数据更新时,同时写入缓存Cache和后端存储(DB)。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。
- 回写模式 Write-behind
在数据更新时只写入缓存Cache。通常由一个后台队列检查缓存中数据的变化,再将据写到后端存储(DB )。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。
常见的数据库和缓存组合
互联网公司普遍采用MySql+Redis模式
缓存更新手段
- 定时轮循
- 过期更新
- MySql数据,是可以解析binlog内容,来实现redis更新
- 数据库触发器
- 第三方组件databus
常见的分布式缓存
- Memcached 不可持久化
- Redis 可持久化
分布缓存中多节点的数据同步
- 节点监听缓存的状态,如果变了,则通知其他节点,作相应的flush
- 各个节点记录自己改变的东西,然后同步到其他节点
需要注意的问题
- 缓存过期
- 穿透效应
- 缓存时效
扩展
大公司有能力直接修改数据库低层或都实现自己的数据存储,实现在数据库更新时,直接更新缓存,像阿里的OCS