摘要:您能确定成为一名高级建筑师吗?您可以在高度并发的环境中构建应用程序级别的缓存吗?
随着我们的系统负载越来越高,系统的性能将下降。目前,我们自然可以认为使用缓存来解决低数据读取性能的问题。?
缓存命中率是读取缓存数据的次数与读取数据的次数的比率。命中率越高,缓存命中率=从缓存读取次数 /读数的次数(读取总数(从缓存中读取次数的次数 +慢速设备的次数)。这是一个非常重要的监视指标。如果您进行缓存,则应使用此指示器来查看缓存是否效果很好。
1.基于空间
基于空间参考缓存设置,设置了存储空间。如果将其设置为10MB,则在达到存储空间限制时,将根据某个策略去除数据。
2.基于容量
最大尺寸是根据缓存的容量设置的。当缓存输入超过最大尺寸时,根据某个策略将删除旧数据。
3.基于时间
TTL(生存时间):生存期,即缓存数据从创建时间开始直至到期(无论是否在此期间访问它,缓存数据都将到期).TTI(是时候闲置了):自由期的时间,访问后未删除的缓存数据的时间。
4.基于对象参考
软引用:如果对象是软引用,则当JVM桩内存不足时,垃圾恢复可以回收这些对象。SOFT引用适用于缓存,因此当JVM桩内存不足时,这些对象可以恢复到自由恢复使用一些空间来避免使用强大的参考对象。
弱参考:当发现垃圾回收记忆(如果发现弱参考)时,将立即将其回收为软引用时,弱参考文献的生命周期较短。
注意:只有当没有其他强参考对象/软引用对象时,当垃圾回收时,将恢复参考。软参考对象,然后在废物回收过程中不会回收弱参考/软参考对象。
5.回收算法
基于空间和容量的缓存的使用将使用某种策略来删除常见的旧数据。
实际应用中的大多数LRU缓存。
堆栈内存:使用Java Heap内存存储对象。使用堆缓存的优点是没有序列化/派生化,这是最快的缓存。缺点也很明显。当高速缓存的数据量很大时,GC的悬架时间(垃圾回收)将更长,并且存储容量仅限于堆空间的大小。通常,缓存对象由软引用/弱储存。参考。也就是说,当堆叠的内存不足时,可以强迫内存的这一部分释放存储内存空间。可以使用堆用于存储热数据。可以使用guava缓存,ehcache,ehcache 3.x,mapdb,mapdb。
DED在外部内存中:也就是说,缓存数据存储在一堆内存中,这可以减少GC悬架时间(将堆对象转移到堆中,GC扫描和移动对象变得更少),可以支持更多的缓存空间(只有机器内存大小的大小(仅机器存储器sizerterniction,不受一堆空间的影响)。但是,当阅读数据时,您需要序列化/派生。可以使用EHCACHE 3.X和MAPDB来实现桩缓存。
磁盘缓存:也就是说,缓存数据存储在磁盘上,当JVM重新启动时,数据仍然存在,并且堆/堆的缓存数据将丢失并需要再次加载。它可以使用EHCache实现。3.x和MAPDB。
分布式缓存:分布式缓存可以使用Ehcache-Clusestered(带有Terracotta Server)在Java进程之间实现分布式缓存。它也可以使用Memcached和Redis实现。
单基机模式:将最热的数据存储到桩缓存中,相对较热的数据以在堆外缓存,而不是磁盘缓存的热数据。
群集模式:将最热的数据存储到桩缓存中,相对较热的数据将其存储到外部缓存,完整数据以分布式缓存。
本文分享了华为的真诚云社区,作者:宾赫。