<dependency> <groupId>net.jodah</groupId> <artifactId>expiringmap</artifactId> <version>0.5.8</version> </dependency> ExpiringMap<String,String> map=ExpiringMap.builder() .maxSize(100) .expiration(1, TimeUnit.SECONDS) .expirationPolicy(ExpirationPolicy.ACCESSED) .variableExpiration() .build(); 以下内容引用自
https://www.kutu66.com//GitHub/article_102376源代码名称:expiringmap 源代码网址:http://www.github.com/jhalterman/expiringmap expiringmap源代码文档 expiringmap源代码下载 Git URL: git://www.github.com/jhalterman/expiringmap.git Git Clone代码到本地: git clone http://www.github.com/jhalterman/expiringmap Subversion代码到本地: $ svn co --depth empty http://www.github.com/jhalterman/expiringmap Checked out revision 1. $ cd repo $ svn up trunk ExpiringMap Build StatusMaven CentralLicenseJavaDoc 一个高性能。低开销。零依赖。线程安全 ConcurrentMap ( ) 实现。 功能包括: 过期策略失败 变量过期时间 最大大小 过期侦听程序 迟缓输入加载项 过期自检功能 支持 Java 6 +,但文档使用lambdas实现简单。 用法 ExpiringMap允许你创建一个在某个时间段之后或者超过最大映射大小之后过期的地图: Map<String, Connection> map =ExpiringMap.builder() . maxSize(123) . expiration(30, TimeUnit.SECONDS) . build();// Expires after 30 seconds or as soon as a 124th element is added and this is the next one to expire based on the expiration policymap.put("connection", connection);过期策略 可以根据创建入口时间或者上次访问时间来发生过期: Map<String, Connection> map =ExpiringMap.builder() . expirationPolicy(ExpirationPolicy.ACCESSED) . build(); 我们还可以为单个条目指定过期策略: map.put("connection", connection, ExpirationPolicy.CREATED); 我们可以随时改变策略: map.setExpirationPolicy("connection", ExpirationPolicy.ACCESSED);变量过期 条目可以有单独的可变过期时间和策略: ExpiringMap<String, Connection> map =ExpiringMap.builder() . variableExpiration() . build(); map.put("connection", connection, ExpirationPolicy.ACCESSED, 5, TimeUnit.MINUTES); 还可以随时更改过期时间和策略: map.setExpiration(connection, 5, TimeUnit.MINUTES); map.setExpirationPolicy(connection, ExpirationPolicy.ACCESSED);最大大小 也可以根据超过允许的最大大小的地图中的条目数来发生过期。 一旦到达了这个大小,添加额外的条目将会在过期策略基于过期策略的第一条条目过期。 Map<String, Connection> map =ExpiringMap.builder() . maxSize(123) . build(); 到期侦听器 过期的侦听器可以在条目过期时得到通知: Map<String, Connection> map =ExpiringMap.builder() . expirationListener((key, connection) -> connection.close()) . build(); 过期侦听器被同步调用,因为条目过期,并且对地图的写操作被阻止,直到。 还可以配置异步过期侦听器,并且在不阻塞映射操作的情况下在单独的线程池中调用: Map<String, Connection> map =ExpiringMap.builder() . asyncExpirationListener((key, connection) -> connection.close()) . build(); 还可以随时添加和删除过期侦听器: ExpirationListener<String, Connection> connectionCloser = (key, connection) -> connection.close(); map.addExpirationListener(connectionCloser); map.removeExpirationListener(connectionCloser);延迟输入 当调用 ExpiringMap.get 时,可以通过 EntryLoader 延迟加载条目: Map<String, Connection> connections =ExpiringMap.builder() . expiration(10, TimeUnit.MINUTES) . entryLoader(address ->newConnection(address)) . build();// Loads a new connection into the map via the EntryLoaderconnections.get("jodah.net"); 也可以在不同的时间使延迟加载的条目过期: Map<String, Connection> connections =ExpiringMap.builder() . expiringEntry(address ->newExpiringValue(newConnection(address), 5, TimeUnit.MINUTES)) . build();到期自检 ExpiringMap允许你了解一个条目什么时候过期: long expiration = map.getExpectedExpiration("jodah.net"); 我们还可以重置条目的内部过期计时器: map.resetExpiration("jodah.net"); 我们可以了解各个条目的配置到期时间: map.getExpiration("jodah.net"); 附加说明 变量过期 当禁用变量过期时( 默认值)。put 和 remove 操作具有常量的O(1) 时间复杂度。 启用变量过期时,put 和 remove 操作的时间复杂度为。 Google App Engine 集成 Google App Engine 用户必须在构造 ExpiringMap 实例之前指定 ThreadFactory,以避免运行时权限错误: ExpiringMap.setThreadFactory(com.google.appengine.api.ThreadManager.currentRequestThreadFactory());ExpiringMap.create();
expiringmap 设置key 过期时间
最新推荐文章于 2024-06-24 16:13:55 发布