wwwcomy 2012-12-16 16:11
浏览 220
已采纳

不用第三方缓存框架的缓存超时清除问题

现有设计:
两层HashMap结构
ClientKey---(CacheKey---XCache)

每次取缓存的时候通过ClientKey和CacheKey找到对应的XCache对象。

现在的设计是另外起一个轮询线程,为每个Client设置一个ClientActiveTime,为每个XCache设置一个CacheActiveTime。每隔一段时间检查当前时间减去ActiveTime是否大于超时时间,当然在扫描过程中是对这两层结构加锁的。

如果Client超时,则所有的XCache清除,或序列化保存。
如果XCache超时,则只清除当前的XCache对象,或序列化保存。

因为XCache引用的对象不小,所以当用户很多的时候会造成系统缓慢,甚至OOM,现请教高手:

1.有没有更好的设计来对XCache进行缓存?
2.这种定时轮询的方式是不是合理,有没有别的方式进行检查?
3.如果使用EHCache或者MemCache会在哪些方面带来优势(因为当前代码是可控的,用第三方的话不知道会不会带来其他问题。)

望赐教,感谢!

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2012-12-16 16:17
    关注

    因为XCache引用的对象不小,所以当用户很多的时候会造成系统缓慢,甚至OOM,现请教高手:
    1.有没有更好的设计来对XCache进行缓存?
    解决方案:
    1、LRU LFU 肯定要设置缓存的大小
    2、SoftReference 保证内存不足的情况垃圾回收

    2.这种定时轮询的方式是不是合理,有没有别的方式进行检查?
    大家都是定时轮询

    3.如果使用EHCache或者MemCache会在哪些方面带来优势(因为当前代码是可控的,用第三方的话不知道会不会带来其他问题。)
    框架的好处就是给你现成的更优良的解决方案,这样直接拿着用即可

    用第三方的话不知道会不会带来其他问题:现在如ehcache都比较稳定了,没什么问题,因为开源如果需要看下源代码即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog