超时-TimedCache

介绍

定时缓存,对被缓存的对象定义一个过期时间,当对象超过过期时间会被清理。此缓存没有容量限制,对象只有在过期后才会被移除。

使用

  1. //创建缓存,默认4毫秒过期
  2. TimedCache<String, String> timedCache = CacheUtil.newTimedCache(4);
  3. //实例化创建
  4. //TimedCache<String, String> timedCache = new TimedCache<String, String>(4);
  5. timedCache.put("key1", "value1", 1);//1毫秒过期
  6. timedCache.put("key2", "value2", DateUnit.SECOND.getMillis() * 5);
  7. timedCache.put("key3", "value3");//默认过期(4毫秒)
  8. //启动定时任务,每5毫秒秒检查一次过期
  9. timedCache.schedulePrune(5);
  10. //等待5毫秒
  11. ThreadUtil.sleep(5);
  12. //5毫秒后由于value2设置了5毫秒过期,因此只有value2被保留下来
  13. String value1 = timedCache.get("key1");//null
  14. String value2 = timedCache.get("key2");//value2
  15. //5毫秒后,由于设置了默认过期,key3只被保留4毫秒,因此为null
  16. String value3 = timedCache.get("key3");//null
  17. //取消定时清理
  18. timedCache.cancelPruneSchedule();

如果用户在超时前调用了get(key)方法,会重头计算起始时间。举个例子,用户设置key1的超时时间5s,用户在4s的时候调用了get("key1"),此时超时时间重新计算,再过4s调用get("key1")方法值依旧存在。如果想避开这个机制,请调用get("key1", false)方法。

说明 如果启动了定时器,那会定时清理缓存中的过期值,但是如果不起动,那只有在get这个值得时候才检查过期并清理。不起动定时器带来的问题是:有些值如果长时间不访问,会占用缓存的空间。