中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis的異步,響應式和RxJava2接口

發布時間:2020-05-13 04:23:15 來源:網絡 閱讀:488 作者:wx5deb0084464f6 欄目:編程語言

在優銳課的java 分享學習中,討論關于讓我們探索Redis的異步,反應式和RxJava2接口。碼了很多知識點,分享給大家參考學習。

異步,響應式和RxJava2都是Java編程語言中的所有相關編程模型。 但是,它們不能在Redis(用于實現內存中數據存儲的開源軟件項目)中自動提供。

好消息是,這三種編程模型都可以在Redis中使用Redisson(Redisson)來使用,Redisson是將Redis與Java集成的第三方客戶端庫。 在本文中,我們將討論這三種模型中的每一種,以及如何使用Redisson在Redis中部署它們。

Redis的異步接口

異步編程是一種并行編程,其中任務與主應用程序在不同的線程上分別運行。 這允許應用程序在任務執行時繼續運行。 一旦任務完成,它將通知主應用程序其成功或失敗。
在Redisson中,每個異步方法都返回一個RFuture對象,該對象代表異步計算的結果。 RFuture在Java中實現java.util.concurrent.Future和java.util.concurrent.CompletionStage接口。

下面是一個如何使用RFuture在Redisson中應用異步編程模型的示例:

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的反應式界面

反應式編程模型是在Java 8的Reactor核心庫中實現的。反應式流是異步流處理的規范,在該規范中,可以異步產生和使用許多不同的事件。 為了應對這種快速步伐,系統需要產生事件的速度不超過消耗事件的速度。

在Redisson中,每個反應式方法都返回一個react..core.publisher.Mono對象,該對象通過發出一個元素來表示已成功完成計算。

以下代碼示例演示了如何在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是另一個實現異步和反應式編程的Java范例。 RxJava2的主要區別在于“可觀察對象”(偵聽發出數據的數據源)和“訂戶”(偵聽一個或多個可觀察對象)之間。
在Redisson中,每個RxJava方法都返回以下可觀察對象之一:io.reactivex.Completable,io.reactivex.Maybe,io.reactivex.Flowable或io.reactivex.Single。

?單一的:可觀察的僅發出一個項目或一個值或引發錯誤。
?也許:一個觀測值發出零個或一個項目或值或引發錯誤。
?可完成:任務完成時發出或拋出錯誤的可觀察對象。

以下是如何在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();
    }
}

文章寫道這里,如有不足之處,歡迎補充評論。

如果你對java技術很感興趣也可以一起交流學習,共同學習進步!

最近get了很多新知識,希望能幫到大家。需要詳細的java架構思維導圖路線也可以評論獲取!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽中县| 望江县| 当阳市| 琼中| 油尖旺区| 娱乐| 册亨县| 新津县| 乌拉特前旗| 平和县| 伊宁市| 平阳县| 正安县| 平陆县| 田林县| 疏附县| 南宫市| 突泉县| 平阳县| 凉城县| 尤溪县| 平邑县| 沅江市| 井冈山市| 新建县| 逊克县| 洛阳市| 涟水县| 和林格尔县| 青阳县| 盘山县| 龙泉市| 讷河市| 玉树县| 郴州市| 额济纳旗| 黄大仙区| 岗巴县| 东丰县| 湘阴县| 宕昌县|