课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存功能的应用在软件开发项目中是非常常见的一个功能,而今天我们就一起来了解一下缓存功能应用与更新方法。
1、缓存的一般使用
缓存,从本质上讲,是为了更好的协调两个速度差异比较大的组件而引入的一种中间缓存层。例如,如果需要将数据读入CPU进行计算处理,由于CPU的运算速度是非常快的,而磁盘的IO处理相比于CPU来说,慢了很多数量级,每次从磁盘读取数据,势会造成CPU长时间并且频繁等待磁盘IO。此时,我们就可以通过内存来缓和CPU和磁盘之间的速度差异。
2、缓存更新策略
从理论上来说,给缓存设置过期时间,其实是一中终一致性的表现。这种方案下,可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。
3、先删除缓存再更新数据库
先删除缓存再更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。可能会出现下面的执行顺序。
(1)线程A删除缓存(2)线程B查询缓存,发现缓存中没有想要的数据(3)线程B查询数据库中的旧数据(4)线程B将查询到的旧数据写入缓存(5)线程A将新数据写入数据库
此时,就出现了数据库中的数据和缓存中的数据不一致的情况。如果删除缓存失败,也会出现数据库数据和缓存数据不一致的现象。
4、先更新数据库再删除缓存
这种方式也有极小的概率发生数据库数据和缓存数据不一致的情况,例如,线程A做查询操作,线程B执行更新操作,其执行的顺序如下所示。
(1)缓存刚好失效(2)请求A查询数据库,获取到数据库中的旧值(3)请求B将新值写入数据库(4)请求B删除缓存(5)请求A将查到的旧值写入缓存
如果上述顺序一旦发生,就会造成数据库中的数据和缓存中的数据不一致的情况发生。
但是,先更新数据库再删除缓存的策略发生数据库和缓存数据不一致的概率很低,原因就是:(3)的写数据库操作比步骤(2)的读数据库操作耗时更短,才有可能使得步骤(4)先于步骤(5)执行。但是,往往数据库的读操作的速度远快于写操作,因此步骤(3)耗时比步骤(2)更短,这一场景很难出现。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。