在我的项目中,我使用 ehcache 来存储登录的用户详细信息和一些其他信息(哪个应用程序将在运行时使用它而不是从数据库中获取)。以下是我的ehcache配置:
<cache
name="normalCache"
maxElementsInMemory="50000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="0"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
但问题是大部分时间 session 超时发生(即使用户不活跃超过 30)。有时它会持续 10 分钟,...
所有操作都将尝试根据每个请求从 ehcache 检索用户对象。
我不确定 ehcache 将如何确定过期时间。
最佳答案
当满足以下条件之一时,Ehcache 会从缓存中逐出对象:
对象未从 ehcache 访问(读取或更新)超过
timeToIdle
秒。如果未设置timeToIdle
,则此规则不适用。换句话说,即使在未设置timeToIdle
时从未从缓存中访问(读取或更新)对象,对象也有资格在缓存中无限期保留。对象已在缓存中超过
timeToLive
秒。如果未设置timeToLive
,则此规则不适用。换句话说,对象有资格在缓存中无限期保留。缓存中的项目数已达到
maxElementsInMemory
限制。在这种情况下,memoryStoreEvictionPolicy
开始行动并删除符合逐出策略的元素,直到缓存中的元素数量变得小于maxElementsInMemory
限制,即使这些项目符合条件根据条件 1 和条件 2 在缓存中。
希望澄清一下!
关于java - 使用 Ehcache 的 WebApp session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701378/