Java 当缓存为空并将值设置为cache from db时,如何进行db调用?
我有一个缓存和一个数据库。我正在从缓存中获取值。如果缓存中的数据为空(由于过期)。在从缓存中获取数据后,我正在调用数据库。我将把值从数据库设置为缓存Java 当缓存为空并将值设置为cache from db时,如何进行db调用?,java,caching,rx-java,Java,Caching,Rx Java,我有一个缓存和一个数据库。我正在从缓存中获取值。如果缓存中的数据为空(由于过期)。在从缓存中获取数据后,我正在调用数据库。我将把值从数据库设置为缓存 Single<String> get() { return getFromCache().onErrorResumeNext(getFromDatabase()); } Single<String> getFromCache() { // or should I use may be here //retu
Single<String> get() {
return getFromCache().onErrorResumeNext(getFromDatabase());
}
Single<String> getFromCache() { // or should I use may be here
//return Single.just("cache");
return Single.error(new Exception("exception"));
}
Single<String> getFromDatabase() {
return Single.just("database");
}
Single<String> setDatabase(Single<String> val) {
return val.map(
v -> {
String res = v;
System.out.println(res);
return res;
}
);
}
singleget(){
返回getFromCache().onErrorResumeNext(getFromDatabase());
}
Single getFromCache(){//或者我应该使用的可能在这里
//返回Single.just(“缓存”);
返回Single.error(新异常(“异常”));
}
单个getFromDatabase(){
返回Single.just(“数据库”);
}
单setDatabase(单val){
返回值映射(
v->{
字符串res=v;
系统输出打印项次(res);
返回res;
}
);
}
在这里,若缓存中的值为空,我可以调用数据库,但我不能调用方法setDatabase
------------我找到了解决这个问题的办法---------------------------
因为我是rxjava新手。我想知道解决这个问题的最好办法是什么
Single<String> get() {
Observable<String> cacheObservable = getFromCache().toObservable();
Observable<String> databaseObservable = getFromDatabase().toObservable();
Single<String> result = Observable.concat(cacheObservable, databaseObservable).firstOrError();
databaseObservable.doOnNext(val-> {
setDatabase(val);
});
return result;
}
Maybe<String> getFromCache() { // or should I use may be here
//return Maybe.just("cache");
return Maybe.empty();
}
Single<String> getFromDatabase() {
return Single.just("database");
}
void setDatabase(String res) {
System.out.println(res);
}
singleget(){
Observable cacheObservable=getFromCache().toObservable();
Observable databaseObservable=getFromDatabase().toObservable();
单个结果=Observable.concat(cacheObservable,databaseObservable).firstOrError();
databaseObservable.doOnNext(val->{
setDatabase(val);
});
返回结果;
}
可能是getFromCache(){//或者我应该使用它,可能在这里
//可能会返回。只是(“缓存”);
返回Maybe.empty();
}
单个getFromDatabase(){
返回Single.just(“数据库”);
}
void setDatabase(字符串res){
系统输出打印项次(res);
}
您几乎完成了,请在您的用例中使用开关ifempty
:
singleget(){
返回getFromCache()
.switchIfEmpty(getFromDatabase().doOnAccess(this::setDatabase));
}