Java 缓存和池有什么区别?

Java 缓存和池有什么区别?,java,Java,缓存和池有什么区别?缓存是保存一个值/对象以供重用-通常是为了节省资源 说: 缓存是一个透明地存储数据的组件,以便将来对该数据的请求可以更快地得到服务 轮询与此类似,您有许多这样的对象(一个池)——一旦从池中取出一个对象并使用它,它就会返回到池中供以后重用 说: 计算机科学中的资源库是一组初始资源,它们随时可用,而不是按需分配和销毁 两者都以对象重用为目标。这种区别通常是按照有状态来划分的;池是无状态对象的集合,缓存是有状态对象之一。请参阅。缓存-存储经常使用的值,这通常是因为查找和/或创建非常

缓存和池有什么区别?

缓存是保存一个值/对象以供重用-通常是为了节省资源

说:

缓存是一个透明地存储数据的组件,以便将来对该数据的请求可以更快地得到服务

轮询与此类似,您有许多这样的对象(一个池)——一旦从池中取出一个对象并使用它,它就会返回到池中供以后重用

说:

计算机科学中的资源库是一组初始资源,它们随时可用,而不是按需分配和销毁


两者都以对象重用为目标。这种区别通常是按照有状态来划分的;池是无状态对象的集合,缓存是有状态对象之一。请参阅。

缓存-存储经常使用的值,这通常是因为查找和/或创建非常重要。e、 如果经常使用数据库中的查找表,或者从磁盘上的文件中读取值,则将其保存在内存中并定期刷新会更有效

缓存只管理缓存中的对象生存期,但不会对缓存中保存的对象施加语义。缓存也不会创建项,而只是存储对象

池-描述由池本身管理的一组资源的术语。e、 g.(数据库)连接池-当需要连接时,从池中获取连接,完成后返回池

池本身处理池对象的创建和销毁,并管理一次可以创建多少个对象

池通常用于减少开销和限制对资源的访问。您不希望每个servlet请求都打开到数据库的新连接。因为在活动请求和打开的连接之间存在1:1的关系。创建并销毁这些连接的开销是浪费的,而且很容易使数据库崩溃。通过使用池,可以共享这些打开的连接。例如,500个活动请求可能只共享5个数据库连接,这取决于典型请求需要连接的时间


缓存池-主要描述存在的(独立?)缓存的数量。例如,asp.net应用程序每个应用程序域有一个缓存(缓存不在asp.net应用程序之间共享)。字面上是一个缓存池,尽管这个术语似乎很少使用。

缓存通常指保留数据的静态副本以便快速检索(假设检索或计算值很昂贵)


池通常是指保留大量资源以供快速使用(假设这些资源的创建和/或处置成本很高)。

用于重用和减少进程的内存占用(同时消除对象创建开销)。一个值得注意的区别是,池在上下文的生命周期中反复使用相同的对象,在缓存中(至少在LRU中)逐出对象以为新创建的对象腾出空间


另一个不同点是以下问题的答案。您希望返回特定对象还是任何对象都可以?答案清楚地说明了您需要什么-缓存或池。

Java代码缓存接口:

public interface Cache { Resource acquire(Identity id)}  // implement usually Map
public interface Pool { Resource acquire() }  // implement usually List
池接口:

public interface Cache { Resource acquire(Identity id)}  // implement usually Map
public interface Pool { Resource acquire() }  // implement usually List

它们用于资源(内存、连接、线程等)的重用。这意味着缓存必须有标识才能找到,但池不需要它。所以从池中获取资源是透明的。这个例子有很多。内存池、内存池、缓冲区缓存池、连接池。

我认为@Haakon answer可以最好地区分缓存和连接池之间的区别。是否庄重。例如,缓存中的值可能会在数据库中更新其真实值,从而使缓存的值过时。池对象本质上不会面临这种情况