本地缓存(又叫进程内缓存)比较:
多级缓存方案搭配示例
- 值较小、热度集中、更新不频繁:Caffeine(JVM KV) - Redis(KV) - MySql(DB ROW)
- 值较大、热度集中、更新不频繁:Caffeine(JVM KV) - MySql(DB ROW)
- 值较小、热度分散、更新频繁:Redis(KV) - MySql(DB ROW)
- 值较大、热度分散:MySql(DB ROW) Cluster
- 基于模糊匹配:ElasticSearch(FS InvertedIndex) - MySql(DB ROW)
使用本地缓存的优点:以空间换时间,加快查询效率,减少网络io(redis的网络开销)
缺点:数据同步问题与编程复杂度问题。
为什么有了redis还需要进程缓存?
因为需要io(网络)的消耗,还需要序列化和反序列化的操作
本地缓存的使用条件:
不实时,不能强一致性,读多写少。设置缓存使用内存的大小和过期时间。
维护缓存数据的一致性:
用caffeine和redis构建多级缓存,caffeine和redis的数据一致性怎么操作好一点?方法二:写操作 先更新数据库,然后删除redis,最后更新值到redis上,然后利用redis的发布订阅机制去更caffeine。
这就需要本地缓存的值是读多写少,而且不需要经过复杂的运算才能更新redis。Spring cache和caffeine的关系就像jdbc和mysql的关系,cache是一种规范标准,caffeine是实现这个标准的产品。