定义:
当访问数据库执行写操作的时候,有缓存介入到整体执行流程中时,先写数据库保证成功的前提下,淘汰(删除)缓存中对应的数据。
查询数据的时候,有缓存介入到整体执行流程中时,先查询缓存,如果有数据直接返回;如果没有数据,查询数据库,并将数据库查询结果保存到缓存中,再返回。
正式开发项目中
一般写操作分为保存(新增和修改)和删除。保存的时候,是同步缓存数据;删除的时候,是淘汰缓存数据。目的是,提升缓存的应用效率。
边路缓存思想中的淘汰目的
1、保证缓存的数据绝对正确;2、没有查询,就没有缓存的必要。
边路缓存中,先写数据库,后淘汰缓存的目的:保证缓存中不会有脏数据。如:多线程的情况下,线程1删除某数据,先淘汰缓存中的数据,CPU到期,终止运行,等待下一个CPU时间片;线程2查询线程1要删除的数据,缓存中没有数据,访问数据库,查询到结果,并缓存;线程1获取CPU时间片,访问数据库,删除数据,执行结束。缓存中有脏数据。
当然先淘汰缓存,然后写数据库也会发生脏数据。因为数据库的访问时间一定比缓存访问时间长,可能出现脏数据的情况概率要低很多。
真实开发中,一定是先访问数据库,后访问缓存 ,如果考虑极限情况可能出现脏数据,则在访问缓存的时候,增加分布式锁或者分布式事务。
分布式事务相对来说是比较慢的,但是可以并行处理,
分布式锁是相对来说是比较快的,但是有可能出现串行化
到底用什么,要具体情况具体分析