缓存空值
、布隆过滤器
。Object nullValue = new Object();
try {
Object valueFromDB = getFromDB(uid); //从数据库中查询数据
if (valueFromDB == null) {
cache.set(uid, nullValue, 10); //如果从数据库中查询到空值,就把空值写入缓存,设置较短的超时时间
} else {
cache.set(uid, valueFromDB, 1000);
}
} catch(Exception e) {
// 出现异常也要写入缓存
cache.set(uid, nullValue, 10);
}
数据命中不高
、 数据相对固定
、 实时性低
(通常是数据 集较大
)的应用场景,代码维护较为复杂,但是缓存空间占用少。为什么呢?因为布隆过滤器不支持删除元素,一旦数据变化,并不能及时的更新布隆过滤器。方案 | 适用场景 | 维护成本 |
---|---|---|
缓存对象 | 1. 数据命中不高 2. 数据频繁变化,实时性高 | 代码维护点单、需要过多的缓存空间,数据一致性需要自己实现 |
布隆过滤器 | 1. 数据命中不高 2.数据相对固定,实时性低 | 代码维护复杂、缓存空间占用少 |