主动学习
服务端缓存
为系统引入缓存的理由
从开发角度来说,引入缓存会提高系统的复杂度,因为你要考虑缓存的失效、更新、一致性等问题(硬件缓存也有这些问题,只是不需要由你来考虑,主流的 ISA 也都没有提供任何直接操作缓存的指令);
从运维角度来说,缓存会掩盖掉一些缺陷,让问题在更久的时间以后,出现在距离发生现场更远的位置上;
从安全角度来说,缓存可能泄漏某些保密数据,这也是容易受到攻击的薄弱点。
理由有
第一种,为了缓解 CPU 压力而做缓存。
第二种,为了缓解 I/O 压力而做缓存。
一种是以 Guava Cache 为代表的同步处理机制。即在访问数据时一并完成缓存淘汰、统计、失效等状态变更操作,通过分段加锁等优化手段来尽量减少数据竞争。
另一种是以 Caffeine 为代表的异步日志提交机制。这种机制参考了经典的数据库设计理论,它把对数据的读、写过程看作是日志(即对数据的操作指令)的提交过程。
写在最后
缓存可能存在什么风险弊端?
1,缓存数据与源数据的一致性(如与数据库不一致等)
2,开发过程中需要程序员操作缓存,要求程序员正确使用
3,缓存数据线上排查问题比较麻烦,进程内缓存无法探查缓存内容