java中如何构建缓存?在java中的缓存有什么优点和缺点?为什么大家都使用第三方缓存?

2022-10-01 12:59:27

正在执行的程序和数据都是在内存中的,由于内存的特点包括“一旦断电数据就会全部丢失”通常,为了保证数据的永久可用,会将数据作“持久化”处理,也就是将数据保存在“可以永久存储数据”的存储介质中,最常见的就是硬盘,而数据在硬盘上必须以“文件”的形式存在,所以,结合程序读写文件的操作手段,持久化处理的常见表现有:

  • 将数据保存在文本文件中,由于文本文件通常是使用IO流读取的,通常仅适合“追加写入”、“全文写入”和“全文读取”这几种需求,如果存在其它需求,例如删除其中的某些数据,或修改局部的数据,则不适用于这种做法(可以实现,但成本较高),常见的应用场景例如:保存日志信息。
  • 将数据存储在XML文件中,基于XML的解析特点,使用的前提必须是“数据量偏小”,并且只涉及“全文写入”、“全文读取”这样的需求,同样不适用于删除其中的某些数据,或修改局部的数据的应用场景,常见的应用场景例如:作为配置文件保存一些配置信息。
  • 将数据存储在数据库中,这是一种适用于增、删、改、查这4种操作的存储方式,并且可以存储海量数据。

无论使用以上哪种存储方式,都是将数据保存到了硬盘上,而硬盘的读写效率是偏低的,这些数据都必须先加载到内存中才可以被处理!为了提高数据的访问效率,将数据保存在硬盘的同时,还可以将数据也保存在内存中!在硬盘的数据不会丢失,保证了数据的可靠性,在内存中的数据访问效率高,提高了处理效率!

以上保存到内存中的数据就是“缓存”的数据,原则上来说,只要是将数据保存到了更加易于访问的位置,都可以称之为“缓存”,由于占用了额外的存储空间才可以提高访问效率,所以缓存是一种“牺牲空间,换取时间”的做法。

关于缓存的构建,可以有多种做法。

如果使用内存缓存,可以使用static修饰全局的量来存储需要缓存的数据,当需要获取数据时,直接访问这个static量即可!

如果数据是存储在数据库中的,通常,数据库服务器与运行程序的应用服务器并不是同一台服务器,每次访问数据时,需要先从应用服务器通过网络连接将SQL语句发送到数据库服务器,由数据库服务器处理完后再将结果返回到应用服务器,这个过程是很耗时的(涉及:建立连接,传输SQL语句,对SQL语句进行词法分析、语义分析、编译、执行、处理结果、返回结果、接收返回的结果等过程),所以,还可以将数据缓存在应用服务器的硬盘,也是缓存的一种做法。

使用缓存的目的都是为了提高访问效率,但是,如果使用应用服务器来缓存数据,要么占用大量的内存空间,要么占用大量的硬盘空间,在大型应用中,应用服务器的性能大多已经接近负载,并不适合缓存数据,所以,一般会搭建专门的缓存服务器。

搭建专门的缓存服务器时,需要在缓存服务器上处理网络连接的问题、数据查找的问题、多线程更新数据的安全问题、批处理的事务等等许多细节的问题,所以,一般使用专门的服务器端软件,典型的例如Redis、MemCache等。

  • 作者:敶(chén)
  • 原文链接:https://blog.csdn.net/chen7360/article/details/108348979
    更新时间:2022-10-01 12:59:27