SpringCache优化、缓存一致性、多级缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCache优化、缓存一致性、多级缓存相关的知识,希望对你有一定的参考价值。

参考技术A 先记录一些纲要

1、SpringCache是写库之后更新的策略,对缓存一致性的不太友好

2、继承RedisCacheManager重写createRedisCache,继承RedisCache重写put

3、缓存一致性有两个方案,一个是先写库再删除缓存、第二个是先删除缓存再写库。

先写库再删除缓存配合超时时间一般没啥问题,极端的情况遇到缓存失效,线程读库和加缓存之间,完成了一次写库和删缓存的操作,导致加的缓存是旧的。总结就是读中加入了一次写。A读库 B写库 B删缓存 A加缓存。

先删缓存再写库的话,是写中加入了一次读。A删缓存 B读库 B加缓存 A写库A。这个概率比上面的大。

这两种方案的问题的解决方式是一样的,就是延时双删策略。即:

删缓存 写库 延时再次删除缓存(需超过一次读库的时间,可以新启线程完成)

或者 写库 删缓存 延时再次删除缓存(需超过一次读库的时间,可以新启线程完成)

如果有主从读写分离,需要将延时再加上主从同步的时间。

还有个第二次删除失败的问题,这个问题可以通过消息中间件,反复尝试进行。或者通过订阅binlog,反复进行。

多级缓存可以参考阿里开源的JetCache的实现

后面会给出demo和源码解析。

以上是关于SpringCache优化、缓存一致性、多级缓存的主要内容,如果未能解决你的问题,请参考以下文章

三:CPU缓存一致性协议MESI

使用Spring Cache实现广告缓存并基于RabbitMQ实现双写一致

使用Spring Cache实现广告缓存并基于RabbitMQ实现双写一致

使用Spring Cache实现广告缓存并基于RabbitMQ实现双写一致

SpringCache

SpringCache源码深度解析