如何在咖啡因缓存中缓存空值
How to cache null values in caffeine cache
我正在使用 Caffeine 缓存来存储从外部系统接收的数据。
LoadingCache<String, String> clientCache = Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build(id -> {
System.out.println("Generating new value for " + id);
if (id.equalsIgnoreCase("1")) {
return null;
}
return new Date().toString();
});
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("2"));
System.out.println(clientCache.get("3"));
结果是,
Generating new value for 1
null
Generating new value for 1
null
Generating new value for 2
Wed May 20 17:11:01 IST 2020
Generating new value for 3
Wed May 20 17:11:01 IST 2020
Wed May 20 17:11:01 IST 2020
Caffeine 没有在缓存中保存空值。如何在 Caffeine 中存储空值?
The cache does not allow storing null values. If you perform a computation and return null then this indicates the data doesn't exist and the caller receives null.
此外,它建议:
Optional
is a good technique for negative caching.
我正在使用 Caffeine 缓存来存储从外部系统接收的数据。
LoadingCache<String, String> clientCache = Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build(id -> {
System.out.println("Generating new value for " + id);
if (id.equalsIgnoreCase("1")) {
return null;
}
return new Date().toString();
});
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("2"));
System.out.println(clientCache.get("3"));
结果是,
Generating new value for 1
null
Generating new value for 1
null
Generating new value for 2
Wed May 20 17:11:01 IST 2020
Generating new value for 3
Wed May 20 17:11:01 IST 2020
Wed May 20 17:11:01 IST 2020
Caffeine 没有在缓存中保存空值。如何在 Caffeine 中存储空值?
The cache does not allow storing null values. If you perform a computation and return null then this indicates the data doesn't exist and the caller receives null.
此外,它建议:
Optional
is a good technique for negative caching.