缓存和池化有什么区别?

Pra*_*ITI 22 java

缓存和池化有什么区别?

Tom*_*Tom 28

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

缓存仅管理缓存中的对象生存期,但不会对缓存中保留的内容施加语义.缓存也不会创建项目,只是存储对象.

池 - 用于描述由池本身管理的一组资源的术语.例如(数据库)连接池 - 当需要连接时,它从池中获取,并在完成时返回到池.

池本身处理池化对象的创建和销毁,并管理任何时候可以创建的对象数.

池通常用于减少开销并限制对资源的访问.您不希望每个servlet请求都打开与数据库的新连接.因为那时您在活动请求和打开连接之间存在1:1的关系.创建破坏这些连接的开销是浪费的,而且您可以轻松地压倒您的数据库.通过使用池,可以共享这些打开的连接.例如,500个活动请求可能只共享5个数据库连接,具体取决于典型请求需要连接的时间长度.

缓存池 - 大多数似乎描述了存在的(独立?)缓存的数量.例如,asp.net应用程序每个Application Domain有1个缓存(asp.net应用程序之间不共享缓存).字面上是一个缓存池,虽然这个术语似乎很少使用.


Ode*_*ded 9

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

维基百科说:

缓存是透明地存储数据的组件,以便可以更快地提供对该数据的未来请求.

轮询是类似的,你有许多这样的对象(一个池) - 一旦一个对象被从池中取出并被使用,它将被返回到池中供以后重用.

维基百科说:

计算机科学中的池是一组初始化资源,可以随时使用,而不是按需分配和销毁.


Haa*_*kon 6

两者的目标都是对象重用。这种区别通常是根据状态性来划分的。池是无状态对象的集合,缓存是有状态对象之一。参见这个解释