数据库和缓存同步机制
来源:互联网 发布:mac 浏览器 编辑:程序博客网 时间:2024/06/05 05:15
之前写了三篇关于秒杀的文章,里面提到了通过分布式缓存来缓解数据库压力。最近有朋友私信回复问,缓存和数据库是如何进行同步的,通过大家的问题,让我感到这个点确实可以聊一下,所以今天准备写一写,供大家做一个参考。
缓存同步的常用模式
缓存同步的模式,可以按照缓存的用途(主要用于读或者写)分为两类:读缓存的同步和写缓存的同步。
读缓存的同步:
缓存预加载模式
提前将数据从数据库加载到缓存,如果数据库有写更新,同步更新缓存。在秒杀情况下,我们对商品数据就按照这种模式进行处理。
缓存直读模式
应用先查看缓存中是否有该数据,有则直接使用,如果没有,从数据库加载,然后放入缓存,下次以后再访问就可以直接从缓存中获得。
写缓存的同步:
缓存直写模式
在数据更新时,同时写入缓存和数据库。这种模式是最稳妥的办法,但是性能会受到一定的影响。
缓存回写模式
在数据更新时只写入缓存。通常由一个后台队列检查缓存中数据的变化,再将据写到后端数据库。
如何避免缓存和数据库的数据不同步
上面介绍了缓存同步的模式,但光依靠模式,是不能完全阻止数据同步是没有问题的。比如说,有两个线程A和B,在并发情况下,他们如果能同时操作某条数据,由于同一个数据进行读写,在数据库层面并发的读写并不能保证完成顺序。就有可能导致数据库与缓存不同步。
所以在在缓存模式下,处理过程中,需要通过对该数据加锁,保证对数据的处理是严格按照串行处理的。
如何检查缓存和数据库的数据是同步的
- 属性中增加一个版本号或者时间戳字段,每次更新缓存后,版本号+1或者取更新时间戳,下一次写操作前,先比较,然后再更新。
- 建立一个定时任务,定义一个同步周期(5分钟或者15分钟),定时任务会对最近一个时间周期内数据库中更新过的数据进行比较,于缓存(例如redis)中的数据进行匹配和比较。
阅读全文
0 0
- 数据库和缓存同步机制
- ListView的显示和缓存机制
- 理解Hibernate的Session和缓存机制
- Android的Bitmap和缓存机制
- redis的持久化和缓存机制
- MyBatis(三) 事务管理和缓存机制
- Mybatis懒加载和缓存机制
- MySQL数据库查询步骤和缓存原理
- MySQL数据库查询步骤和缓存原理
- 如何保持数据库和缓存的一致性
- ajax同步与异步加载和缓存清理设置
- 用repcache 主备来解决缓存备份和缓存同步问题
- ASP.NET中的状态管理和缓存机制
- Hibernate——脏检查和缓存清理机制
- 网络请求的缓存机制cachePolicy 和缓存的清理
- Hibernate——脏检查和缓存清理机制
- Hibernate中的三种数据持久状态和缓存机制
- 有关hibernate相关的延迟加载和缓存机制
- Heavy Transportation POJ
- 你需要来自XXX的权限才能对此文件夹进行更改 win10
- struts2初学笔记
- CentOS7简单配置网络
- 超好用的网络抓包框架(Windivert)之四(实例二)
- 数据库和缓存同步机制
- hdu 6058 Kanade's sum
- 2743: [HEOI2012]采花(离线树状数组)
- Python库之Requests(iMooc)---(1)
- 菜鸟心历之路(6)
- 【JavaScript】最简单的一个例子
- 《Visual Basic 程序设计》——>基本概念
- String类的常用方法(1)A
- LeetCode 231 Power of Two AND LeetCode 326 Power of Three