我有一些需要从缓存中存储和获取的大对象。这些对象的大小约为 1 - 2 mb。
在localCache
启用的情况下运行时,检索时间不会超过几毫秒,但如果没有它,则始终需要大约 3 秒。
我正在使用 Azure 角色内缓存(并置)。
谁能解释一下为什么不启用 localCache 会慢得多?
我有一些需要从缓存中存储和获取的大对象。这些对象的大小约为 1 - 2 mb。
在localCache
启用的情况下运行时,检索时间不会超过几毫秒,但如果没有它,则始终需要大约 3 秒。
我正在使用 Azure 角色内缓存(并置)。
谁能解释一下为什么不启用 localCache 会慢得多?
LocalCache 是进程本地的,即在应用程序的进程内存中。如果启用 LocalCache,则从缓存中获取的对象也将存储在 LocalCache 中。该对象的每个下一个请求都将从该 LocalCache 提供服务(无需从进程外缓存中获取)。但是第一次检索对象需要时间。
根据MSDN:
启用本地缓存后,缓存客户端会在本地存储对对象的引用。这使对象在客户端应用程序的内存中保持活动状态。当应用程序请求对象时,缓存客户端首先检查对象是否驻留在本地缓存中。如果是这样,则立即返回对该对象的引用,而无需联系服务器。如果不存在,则从服务器检索该对象。然后缓存客户端反序列化对象并将对这个新检索到的对象的引用存储在本地缓存中。客户端应用程序使用相同的对象。
而当本地缓存被禁用时,每个检索请求都被定向到进程外缓存,导致每次都从外部进程的内存中获取对象。