缓冲容量大小的影响因素是缓冲比和总浓度。对于同一缓冲系 ,当缓冲比一定时,总浓度越大,抗酸成分和抗碱成分越多,外加同量酸碱后,缓冲比变化越 小,缓冲容最大 ,缓冲能力就越强;反之 ,总浓度越小,缓冲容量越小 ,缓冲能力就越弱。
对于同一缓冲系 ,当总浓度一定时,缓冲比越接近 1,外加同量酸碱后 ,缓冲比变化越小 ,缓冲容量越大 ,缓冲能力就越强;反之 ,缓冲比越偏离 1,缓冲容量越小 ,缓冲能力就越弱。 当缓冲比等于1,缓冲容量最大。
缓冲的方式
先更新数据库,再更新缓存。这种做法最大的问题就是两个并发的写 *** 作导致脏数据。如下图(以Redis和Mysql为例),两个并发更新 *** 作,数据库先更新的反而后更新缓存,数据库后更新的反而先更新缓存。这样就会造成数据库和缓存中的数据不一致,应用程序中读取的都是脏数据。
先删除缓存,再更新数据库。这个逻辑是错误的,因为两个并发的读和写 *** 作导致脏数据。(以Redis和Mysql为例)。
假设更新 *** 作先删除了缓存,此时正好有一个并发的读 *** 作,没有命中缓存后从数据库中取出老数据并且更新回缓存,这个时候更新 *** 作也完成了数据库更新。此时,数据库和缓存中的数据不一致,应用程序中读取的都是原来的数据(脏数据)。
写一个缓存类,将数据写到缓存中时把缓存时间设置为1年或者更久然后当你数据库更新后清除这个缓存或者将缓存时间改成0,这样再次进入这个页面的时候就会被新数据重新缓存进来了~
用消息队列更新缓存原因:1、通过消息队列将更新缓存 *** 作串行处理,可以解决并发更新的问题,比如线程A、线程B在并发更新数据库时,利用数据库事务隔离机制避免脏读。
2、然后把数据标识写入消息队列,接下来消费消息队列,再通过数据标识去读取数据库相应数据并刷新缓存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)