在優(yōu)銳課的java 分享學(xué)習(xí)中,討論關(guān)于讓我們探索Redis的異步,反應(yīng)式和RxJava2接口。碼了很多知識點(diǎn),分享給大家參考學(xué)習(xí)。
異步,響應(yīng)式和RxJava2都是Java編程語言中的所有相關(guān)編程模型。 但是,它們不能在Redis(用于實(shí)現(xiàn)內(nèi)存中數(shù)據(jù)存儲的開源軟件項目)中自動提供。
好消息是,這三種編程模型都可以在Redis中使用Redisson(Redisson)來使用,Redisson是將Redis與Java集成的第三方客戶端庫。 在本文中,我們將討論這三種模型中的每一種,以及如何使用Redisson在Redis中部署它們。
Redis的異步接口
異步編程是一種并行編程,其中任務(wù)與主應(yīng)用程序在不同的線程上分別運(yùn)行。 這允許應(yīng)用程序在任務(wù)執(zhí)行時繼續(xù)運(yùn)行。 一旦任務(wù)完成,它將通知主應(yīng)用程序其成功或失敗。
在Redisson中,每個異步方法都返回一個RFuture對象,該對象代表異步計算的結(jié)果。 RFuture在Java中實(shí)現(xiàn)java.util.concurrent.Future和java.util.concurrent.CompletionStage接口。
下面是一個如何使用RFuture在Redisson中應(yīng)用異步編程模型的示例:
package redis.demo;
import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RFuture;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
public class RedisAsyncTest {
public static void main( String[] args )
{
// connects to 127.0.0.1:6379 by default
RedissonClient redisson = Redisson.create();
// perform operations
RBucket<String> bucket = redisson.getBucket("simpleObject");
RFuture<Void> setFuture = bucket.setAsync("This is object value");
setFuture.onComplete((value, exception) -> {
// on invocation completion
});
RMap<String, String> map = redisson.getMap("simpleMap");
RFuture<String> putFuture = map.putAsync("mapKey", "This is map value");
putFuture.onComplete((value, exception) -> {
System.out.println("previous value: " + value);
});
RFuture<String> getFuture = bucket.getAsync();
getFuture.onComplete((value, exception) -> {
System.out.println("stored object value: " + value);
});
RFuture<String> getMapFuture = map.getAsync("mapKey");
getMapFuture.onComplete((value, exception) -> {
System.out.println("stored map value: " + value);
});
redisson.shutdown();
}
}
Redis的反應(yīng)式界面
反應(yīng)式編程模型是在Java 8的Reactor核心庫中實(shí)現(xiàn)的。反應(yīng)式流是異步流處理的規(guī)范,在該規(guī)范中,可以異步產(chǎn)生和使用許多不同的事件。 為了應(yīng)對這種快速步伐,系統(tǒng)需要產(chǎn)生事件的速度不超過消耗事件的速度。
在Redisson中,每個反應(yīng)式方法都返回一個react..core.publisher.Mono對象,該對象通過發(fā)出一個元素來表示已成功完成計算。
以下代碼示例演示了如何在Redisson中使用Mono對象:
package redis.demo;
import org.redisson.Redisson;
import org.redisson.api.RBucketReactive;
import org.redisson.api.RMapReactive;
import org.redisson.api.RedissonReactiveClient;
import reactor.core.publisher.Mono;
public class RedisReactiveTest {
public static void main( String[] args )
{
// connects to 127.0.0.1:6379 by default
RedissonReactiveClient redisson = Redisson.createReactive();
// perform operations
RBucketReactive<String> bucket = redisson.getBucket("simpleObject");
Mono<Void> setMono = bucket.set("This is object value");
setMono.subscribe(value -> {
// on invocation completion
});
RMapReactive<String, String> map = redisson.getMap("simpleMap");
Mono<String> putMono = map.put("mapKey", "This is map value");
putMono.subscribe(value -> {
System.out.println("previous value: " + value);
});
Mono<String> getMono = bucket.get();
getMono.subscribe(value -> {
System.out.println("stored object value: " + value);
});
Mono<String> getMapMono = map.get("mapKey");
getMapMono.subscribe(value -> {
System.out.println("stored map value: " + value);
});
redisson.shutdown();
}
}
用于Redis的RxJava2接口
RxJava2是另一個實(shí)現(xiàn)異步和反應(yīng)式編程的Java范例。 RxJava2的主要區(qū)別在于“可觀察對象”(偵聽發(fā)出數(shù)據(jù)的數(shù)據(jù)源)和“訂戶”(偵聽一個或多個可觀察對象)之間。
在Redisson中,每個RxJava方法都返回以下可觀察對象之一:io.reactivex.Completable,io.reactivex.Maybe,io.reactivex.Flowable或io.reactivex.Single。
?單一的:可觀察的僅發(fā)出一個項目或一個值或引發(fā)錯誤。
?也許:一個觀測值發(fā)出零個或一個項目或值或引發(fā)錯誤。
?可完成:任務(wù)完成時發(fā)出或拋出錯誤的可觀察對象。
以下是如何在Redis和Redisson中使用RxJava2編程模型的示例:
package redis.demo;
import org.redisson.Redisson;
import org.redisson.api.RBucketRx;
import org.redisson.api.RMapRx;
import org.redisson.api.RedissonRxClient;
import io.reactivex.Completable;
import io.reactivex.Maybe;
public class RedisRxTest {
public static void main( String[] args )
{
// connects to 127.0.0.1:6379
RedissonRxClient redisson = Redisson.createRx();
// perform operations
RBucketRx<String> bucket = redisson.getBucket("simpleObject");
Completable completable = bucket.set("This is object value");
completable.subscribe(() -> {
// on invocation completion
});
RMapRx<String, String> map = redisson.getMap("simpleMap");
Maybe<String> putMaybe = map.put("mapKey", "This is map value");
putMaybe.subscribe(value -> {
System.out.println("previous value: " + value);
});
Maybe<String> getMaybe = bucket.get();
getMaybe.subscribe(value -> {
System.out.println("stored object value: " + value);
});
Maybe<String> mapGetMaybe = map.get("mapKey");
mapGetMaybe.subscribe(value -> {
System.out.println("stored map value: " + value);
});
redisson.shutdown();
}
}
文章寫道這里,如有不足之處,歡迎補(bǔ)充評論。
如果你對java技術(shù)很感興趣也可以一起交流學(xué)習(xí),共同學(xué)習(xí)進(jìn)步!
最近get了很多新知識,希望能幫到大家。需要詳細(xì)的java架構(gòu)思維導(dǎo)圖路線也可以評論獲?。?/p>
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
本文標(biāo)題:Redis的異步,響應(yīng)式和RxJava2接口-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://sd-ha.com/article18/dcecgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站制作、網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航、虛擬主機(jī)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容