当缓存为空时如何进行数据库调用并将值设置为来自数据库的缓存?
how do I make a db call when cache is empty and set value to cache from db?
我有一个缓存,database.I 正在从缓存中获取值。如果缓存中的数据为空(由于过期)。我正在调用数据库并从缓存中获取数据后。我会将数据库中的值设置到缓存中。
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;
}
);
}
在这里,如果缓存中的值为空,我可以调用数据库,但我无法调用方法 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);
}
您快完成了,使用 switchIfEmpty
作为您的用例:
Single<String> get() {
return getFromCache()
.switchIfEmpty(getFromDatabase().doOnSuccess(this::setDatabase));
}
我有一个缓存,database.I 正在从缓存中获取值。如果缓存中的数据为空(由于过期)。我正在调用数据库并从缓存中获取数据后。我会将数据库中的值设置到缓存中。
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;
}
);
}
在这里,如果缓存中的值为空,我可以调用数据库,但我无法调用方法 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);
}
您快完成了,使用 switchIfEmpty
作为您的用例:
Single<String> get() {
return getFromCache()
.switchIfEmpty(getFromDatabase().doOnSuccess(this::setDatabase));
}