电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Redis Java Lettuce驅動框架原理解析

瀏覽:9日期:2022-08-19 18:05:43

Lettuce是一個高性能基于Java編寫的Redis驅動框架,底層集成了Project Reactor提供天然的反應式編程,通信框架集成了Netty使用了非阻塞IO,5.x版本之后融合了JDK1.8的異步編程特性,在保證高性能的同時提供了十分豐富易用的API,5.1版本的新特性如下:

支持Redis的新增命令ZPOPMIN, ZPOPMAX, BZPOPMIN, BZPOPMAX。 支持通過Brave模塊跟蹤Redis命令執行。 支持Redis Streams。 支持異步的主從連接。 支持異步連接池。 新增命令最多執行一次模式(禁止自動重連)。 全局命令超時設置(對異步和反應式命令也有效)。 ......等等

注意一點:Redis的版本至少需要2.6,當然越高越好,API的兼容性比較強大。

引入依賴項:

<dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>5.3.4.RELEASE</version></dependency>

一、連接Redis

單機、哨兵、集群模式下連接Redis需要一個統一的標準去表示連接的細節信息,在Lettuce中這個統一的標準是RedisURI??梢酝ㄟ^三種方式構造一個RedisURI實例:

定制的字符串URI語法:

RedisURI uri = RedisURI.create('redis://localhost/');

使用建造器(RedisURI.Builder):

RedisURI uri = RedisURI.builder().withHost('localhost').withPort(6379).build();

直接通過構造函數實例化:

RedisURI uri = new RedisURI('localhost', 6379, 60, TimeUnit.SECONDS);

二、基本使用

Lettuce使用的時候依賴于四個主要組件:

RedisURI:連接信息。 RedisClient:Redis客戶端,特殊地,集群連接有一個定制的RedisClusterClient。 Connection:Redis連接,主要是StatefulConnection或者StatefulRedisConnection的子類,連接的類型主要由連接的具體方式(單機、哨兵、集群、訂閱發布等等)選定,比較重要。 RedisCommands:Redis命令API接口,基本上覆蓋了Redis發行版本的所有命令,提供了同步(sync)、異步(async)、反應式(reative)的調用方式,對于使用者而言,會經常跟RedisCommands系列接口打交道。

一個基本使用例子如下:

RedisURI redisUri = RedisURI.builder() // <1> 創建單機連接的連接信息 .withHost('localhost') .withPort(6379) .withTimeout(Duration.of(10, ChronoUnit.SECONDS)) .build();RedisClient redisClient = RedisClient.create(redisUri); // <2> 創建客戶端StatefulRedisConnection<String, String> connection = redisClient.connect(); // <3> 創建線程安全的連接RedisCommands<String, String> redisCommands = connection.sync();// <4> 創建同步命令SetArgs setArgs = SetArgs.Builder.nx().ex(5);String result = redisCommands.set('name', 'throwable', setArgs);result = redisCommands.get('name');System.out.println(result);// ... 其他操作connection.close(); // <5> 關閉連接redisClient.shutdown(); // <6> 關閉客戶端

關閉連接一般在應用程序停止之前操作,一個應用程序中的一個Redis驅動實例不需要太多的連接(一般情況下只需要一個連接實例就可以,如果有多個連接的需要可以考慮使用連接池,其實Redis目前處理命令的模塊是單線程,在客戶端多個連接多線程調用理論上沒有效果)。

關閉客戶端一般應用程序停止之前操作,如果條件允許的話,基于后開先閉原則,客戶端關閉應該在連接關閉之后操作。

三、Lettuce API

同步(sync):RedisCommands。 異步(async):RedisAsyncCommands。 反應式(reactive):RedisReactiveCommands。

RedisURI redisUri = RedisURI.builder() .withHost('localhost') .withPort(6379) .withTimeout(Duration.of(10, ChronoUnit.SECONDS)) .build();RedisClient client = RedisClient.create(redisUri);StatefulRedisConnection<String, String> connection = client.connect();

Redis命令API的具體實現可以直接從StatefulRedisConnection實例獲取,見其接口定義:

public interface StatefulRedisConnection<K, V> extends StatefulConnection<K, V> { boolean isMulti(); RedisCommands<K, V> sync(); RedisAsyncCommands<K, V> async(); RedisReactiveCommands<K, V> reactive();}

值得注意的是,在不指定編碼解碼器RedisCodec的前提下,RedisClient創建的StatefulRedisConnection實例一般是泛型實例StatefulRedisConnection<String,String>,也就是所有命令API的KEY和VALUE都是String類型,這種使用方式能滿足大部分的使用場景。當然,必要的時候可以定制編碼解碼器RedisCodec<K,V>。

同步API

先構建RedisCommands實例

RedisCommands<String, String> redisCommands= connection.sync();String pong = redisCommands.ping();// 返回PONGSystem.out.println('pong:' + pong);

SetArgs setArgs = SetArgs.Builder.nx().ex(5);redisCommands.set('name', 'throwable', setArgs);String value = redisCommands.get('name');System.out.println('name:' + value);

同步API在所有命令調用之后會立即返回結果。如果熟悉Jedis的話,RedisCommands的用法其實和它相差不大。

異步API

先構建RedisAsyncCommands實例:

RedisAsyncCommands<String, String> redisCommands = connection.async();

基本使用:

RedisAsyncCommands<String, String> redisCommands = connection.async();RedisFuture<String> redisFuture = redisCommands.ping();// 返回PONGSystem.out.println('pong:' + redisFuture.get());

SetArgs setArgs = SetArgs.Builder.nx().ex(5);RedisFuture<String> future = redisCommands.set('name', 'throwable', setArgs);System.out.println('name:' + future.get());

RedisAsyncCommands所有方法執行返回結果都是RedisFuture實例,而RedisFuture接口的定義如下:

public interface RedisFuture<V> extends CompletionStage<V>, Future<V> { String getError(); boolean await(long timeout, TimeUnit unit) throws InterruptedException;}

也就是,RedisFuture可以無縫使用Future或者JDK1.8中引入的CompletableFuture提供的方法。

反應式API

Lettuce引入的反應式編程框架是Project Reactor,如果沒有反應式編程經驗可以先自行了解一下Project Reactor。

構建RedisReactiveCommands實例:

RedisReactiveCommands<String, String> redisCommands = connection.reactive();

根據Project Reactor,RedisReactiveCommands的方法如果返回的結果只包含0或1個元素,那么返回值類型是Mono,如果返回的結果包含0到N(N大于0)個元素,那么返回值是Flux。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 苏州西装定制-西服定制厂家-职业装定制厂家-尺品服饰西装定做公司 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 博医通医疗器械互联网供应链服务平台_博医通 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 |