Ram*_*mki 6 java session web-applications ehcache session-management
在我的项目中,我使用ehcache存储登录的用户详细信息和一些其他信息(哪个应用程序将在运行时使用它而不是从db获取).以下是我的ehcache配置:
<cache
name="normalCache"
maxElementsInMemory="50000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="0"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
Run Code Online (Sandbox Code Playgroud)
但问题是会话超时发生的大部分时间(即使用户不是非活动状态> 30).有时会发生10分钟,......
所有操作都将尝试从ehcache的每个请求中检索用户对象.
我不确定ehcache将如何确定到期时间.
当满足以下条件之一时,Ehcache会从缓存中驱逐对象:
尚未从ehcache(读取或更新)访问对象超过timeToIdle秒.如果timeToIdle未设置,则此规则不适用.换句话说,即使timeToIdle未设置从缓存中永远不访问(读取或更新)对象,对象也有资格在缓存中保留无限时间.
对象已在缓存中停留超过timeToLive秒.如果timeToLive未设置,则此规则不适用.换句话说,对象有资格在缓存中保留无限时间.
缓存中的项目数已达到maxElementsInMemory限制.在这种情况下启动memoryStoreEvictionPolicy并删除与驱逐策略匹配的元素,直到缓存中的元素数量变得小于maxElementsInMemory限制,即使这些项目符合条件1和2的条件在缓存中.
希望澄清一下!
ehcache 不保证将所有元素保留 30 分钟。
在您的配置中,您的 maxElementsInMemory 为 50000。也许您曾经达到过 50000,因此最近最少使用的条目将被逐出,因为您将 OverflowToDisk 设置为 false。