Caffeine:为每个元素动态设置过期时间
Caffeine 是一个开源的 Java 缓存库,它提供了一个高效且易于使用的缓存解决方案,可以帮助 Java 开发人员快速实现缓存功能,提升应用程序的性能和响应速度。Caffeine 支持多种缓存策略,并具有高性能、低延迟和低内存占用的特点,是 Java 开发人员在构建高性能应用程序时不可或缺的工具之一。
对于Caffeine的缓存过期设置来说,我们知道有
-
expireAfterWrite:基于创建时间进行过期处理 -
expireAfterAccess:基于最后访问时间进行过期处理 -
expireAfter:基于个性化定制的逻辑来实现过期处理(可以定制基于新增、读取、更新等场景的过期策略,甚至支持为不同记录指定不同过期时间)
在Caffeine缓存创建时,可以使用expireAfterWrite或expireAfterAccess来设置缓存元素的过期时间,但这种过期时间的设置是基于整个缓存的所有元素来说的,即每个元素的过期时间都是这个指定的时间。
那么如果我们想针对缓存中的每个元素单独设置缓存过期时间要怎么做呢?就要涉及到expireAfter这个设置。
expireAfter方法接收一个Expiry对象来计算缓存项何时过期。在Expiry对象中需要实现expireAfterCreate、expireAfterUpdate、expireAfterRead三个方法。
- expireAfterCreate: 指定一旦条目创建后的持续时间过了,就应该自动从缓存中删除该条目。为了表示没有过期,可以给一个条目一个过长的周期,比如Long.MAX_VALUE。
- expireAfterUpdate: 指定在更新其值后的持续时间一过,就应自动从缓存中删除该条目。为了表示没有过期,可以给一个条目一个过长的周期,比如Long.MAX_VALUE。可以返回currentDuration来不修改过期时间。
- expireAfterRead: 指定超过最后一次读取后的持续时间,就应自动从缓存中删除该条目。为了表示没有过期,可以给条目一个过长的周期,比如Long.MAX_VALUE。可以返回currentDuration来不修改过期时间。
话不多说,给出代码示例,大家就知道如何来写了
Example
Employee.java
public class Employee {
private int id;
private String firstName;
private String lastName;
private long expiryTime;
public Employee(int id, String firstName, String lastName, long expiryTime) {
super();
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.expiryTime = expiryTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void

Caffeine库允许为每个缓存元素设置独立过期时间,通过expireAfter和Expiry接口实现。示例展示了如何在CaffeineTest中使用这些特性。
261

被折叠的 条评论
为什么被折叠?



