对于目前数据主导的系统,大多数都是Java/Go 技术栈+MySQL,但是随着时间的推移,数据库数据的数据量过多,并且会频繁访问热点数据,为了提升系统的性能,一般都是加入缓存中间件、Redis。
局部性原理
我们知道在CPU中为了提升CPU执行速度,避免从内存获取数据过慢,所以就会引入一二三级缓存,三级缓存对于所有核是共享,一二级是独享的。
而从途中可以看到,从l1 Cache到Disk 价格是越来越便宜,但是存储空间越来越大,但是访问速度越来越慢。
那么可不可以找到一种方案就是用更便宜的存储器来提升速度。业界就是采用局部性原理。
局部性原理分为两个,一个是时间局部性,另一个是空间局部性。
- 时间局部性:同一份数据在短时间内回被访问多次。
- 空间局部性:相邻的数据会被连续访问。
这样就可以将频繁访问的数据放入速度更快的cache中,而剩余数据存储在廉价的磁盘中。
这样就没有问题了嘛,其实缓存的引入虽然可以提升系统读性能。但是也引入以下几个问题
- 数据淘汰策略 -> LRU
- 缓存命中率
- 缓存失效、缓存更新,数据一致性问题等。
所以本质上,通过引入缓存是通过牺牲数据强一致性来提升性能的。
小结
本篇主要简单介绍来以下时间局部性,为了在成本和性能之间权衡,引入时间局部性原理,将热点数据存储在速度更快的存储设备中,提升整体的性能。但是缓存的引入需要考虑几点,缓存的高可用性(副本、分片机制),缓存命中率、缓存淘汰算法、缓存更新、缓存失效。