java中本地缓存,并单独设置过期时长,封装类并且调用 java中本地缓存,并单独设置过期时长,封装类 、java中本地缓存,并单独设置过期时长,封装类
时间: 2024-09-21 17:08:37 浏览: 26
java操作Redis缓存设置过期时间的方法
在Java中,我们可以使用`java.util.concurrent.LocalCache`或者第三方库如Guava Cache来创建本地缓存,它们支持自定义过期策略。以下是一个简单的封装示例:
```java
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import java.time.Duration;
public class LocalCacheManager {
private static final String CACHE_NAME = "exampleCache";
// 获取默认的CacheManager实例
private static CacheManager cacheManager = Caching.getCacheManager();
// 创建LocalCache实例,并设置过期时间
public static <K, V> Cache<K, V> createCacheWithExpiration(Duration expiration) {
return cacheManager.createCache(CACHE_NAME, newexpireTimeBasedLoadingCacheConfig(expiration));
}
// 自定义加载缓存配置
private static LoadingCache<CacheLoaderKey, CacheValue> newexpireTimeBasedLoadingCacheConfig(Duration expiration) {
ExpiryPolicy policy = ExpiryPolicyBuilder.timeToLiveExpiration(expiration);
return CacheBuilder.newBuilder()
.expireAfterWrite(expiration)
.maximumSize(1000) // 设置最大容量
.build(new CacheLoader<CacheLoaderKey, CacheValue>() {
@Override
public CacheValue load(CacheLoaderKey key) throws Exception {
// 这里可以根据需要实现数据加载逻辑
return loadData(key);
}
});
}
// 根据实际业务逻辑填充数据
private static CacheValue loadData(CacheLoaderKey key) {
// 这里填写你的数据加载代码
// 示例:假设key是唯一标识,可以从数据库或其他源获取数据
return new CacheValue("Data for " + key.getKey());
}
// 使用缓存
public static CacheValue getDataFromCache(CacheLoaderKey key) {
Cache<CacheLoaderKey, CacheValue> cache = getCache();
if (cache != null) {
return cache.getIfPresent(key);
} else {
throw new IllegalStateException("Cache is not initialized");
}
}
// 获取缓存实例
private static Cache<CacheLoaderKey, CacheValue> getCache() {
return cacheManager.getCache(CACHE_NAME);
}
}
// 使用示例
class CacheLoaderKey { /* Key对象 */ }
class CacheValue { /* Value对象 */ }
```
在这个例子中,我们创建了一个`LocalCache`实例,设置了基于时间的过期策略(`timeToLiveExpiration`)。当缓存项未被访问且超过了指定的时长,它就会自动失效。你需要根据实际需求替换`loadData`方法中的数据加载逻辑。
阅读全文