加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

缓存中存在的挑战及策略

发布时间:2021-04-20 16:51:14 所属栏目:外闻 来源:互联网
导读:(RAM)和内存存储引擎这类在缓存层下的硬件能够实现快速存取,它们通常和软件层一起被用于访问数据。缓存基本上分为两种:本地缓存和远程缓存。本地缓存依靠JVW(Java虚拟机)堆进行储存,而远程(或集群)缓存使用内存存储器,如Redis和Memcached。 什么是堆内本

(RAM)和内存存储引擎这类在缓存层下的硬件能够实现快速存取,它们通常和软件层一起被用于访问数据。缓存基本上分为两种:本地缓存和远程缓存。本地缓存依靠JVW(Java虚拟机)堆进行储存,而远程(或集群)缓存使用内存存储器,如Redis和Memcached。

什么是堆内本地缓存?

堆内缓存指把数据存储于Java堆中,在这里数据由垃圾收集器(GC)自动管理。

堆内缓存的优点:

  • GC会自动分配和释放对象
  • 访问数据的速度更快

堆内缓存的不足:

  • GC停顿多发
  • 因为数据被存储于JVM存储器之中,如果JVM崩溃了,数据就会丢失。因此无法长期缓存。

什么是堆外本地缓存?

堆外缓存指把数据存储在堆外。垃圾收集器不会自动处理这些数据,因为数据被存储在Java堆外,所以它们以字节数组存储,因此也存在把数据序列化和反序列化的额外运行负担。

堆外缓存的优点:

  • 允许大量数据的缓存且无须担心GC停顿
  • JVM崩溃后支持在存储器中添加持久层以恢复数据
  • JVM之间可共享缓存数据

堆外缓存的不足:

  • 数据的序列化和反序列化是使用堆外缓存时最大的不便之处。这会为下层程序带来计算负担。因为没有共同的数据结构,把序列化的数据转换成单独对象将付出额外的成本。
  • 短期数据更适合堆内缓存,因为它允许GC自动运行。因而,识别哪些数据可以被归于堆内缓存会带来额外的计算。
  • 手动存储器管理(像存储器分段之类的问题!)

总之,因为堆外缓存能够长期存储大量数据,所以它是存储数据的一种更好方式。再加上大磁盘子系统,就能提高每秒读写次数(IOPS)。

什么是远程缓存?

远程缓存是将数据存储在云端的缓冲区。因为可以在云端检索数据,所以这有助于构建一个更坚固且性能更强的持久层。Redis和Memcached是当下两

  • 存集群可以根据需求进行扩展
  • 远程缓存不仅仅局限于单一数据结构,并且它支持多语言编程,因而操作简单。
  • 与磁盘的低速存取相比,性能有所增强(因为数据存储在存储器中,存取数据速度更快)

如何确定系统/服务需要缓存

  • 缓存命中率:如果服务所提供的数据不需要经常刷新且属于经常检索型数据,应当考虑缓存它们。
  • 最终一致性的容限:仔细考虑源数据的变化率,以及缓存的刷新频率。还应该考虑服务对象是否重视最近数据的读取。

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读