1. 程式人生 > >redis的java客戶端lettuce的使用

redis的java客戶端lettuce的使用

從官方文件翻譯並整理的,有地方可能表述不準確

1. lettuce的介紹

lettuce是一個執行緒安全的redis客戶端。提供同步,非同步和reactive(?)的 APIs.。如果可以避開阻塞和事務型的操作比如BLPOP 和MULTI/EXEC,多個執行緒可以分享同一個連線。多個連線被NIO框架netty有效的管理。

並且支援哨兵模式,叢集模式和資料模式。

他的大部分方法對正好對應redis的命令。

2. RedisURI

1. 建立

RedisURI是redis連線的一些標準資訊,比如需要提供資料庫名稱,密碼,url,超時時間等。有三種方式可以建立:

  • RedisURI.create("redis://localhost/");
  • RedisURI.Builder.redis("localhost", 6379).auth("password").database(1).build();
  • new RedisURI("localhost", 6379, 60, TimeUnit.SECONDS);

2. uri的語法

  • 單獨的redis:

redis :// [: [email protected]] host [: port] [/ database][? [timeout=timeout[d|h|m|s|ms|us|ns]] [&_database=database_]]

  • 單獨的redis ssl:

rediss :// [:

[email protected]] host [: port] [/ database][? [timeout=timeout[d|h|m|s|ms|us|ns]] [&_database=database_]]

  • 單獨的redis unix的socket

redis-socket :// path [?[timeout=timeout[d|h|m|s|ms|us|ns]][&_database=database_]]

  • redis哨兵模式

redis-sentinel :// [: [email protected]] host1[: port1] [, host2[: port2]] [, hostN[: portN]] [/ database][?[timeout=timeout[d|h|m|s|ms|us|ns]] [&_sentinelMasterId=sentinelMasterId_] [&_database=database_]]

3. 時間單位

  • d 天
  • h小時
  • m分鐘
  • s秒
  • ms 毫秒
  • us 微秒
  • ns 納秒

4. 示例

  • url和port
RedisClient client = RedisClient.create(RedisURI.create("localhost", 6379));
client.setDefaultTimeout(20, TimeUnit.SECONDS);

// …

client.shutdown();
  •  builder
RedisURI redisUri = RedisURI.Builder.redis("localhost")
                                .withPassword("authentication")
                                .withDatabase(2)
                                .build();
RedisClient client = RedisClient.create(redisUri);
  • ssl builder
RedisURI redisUri = RedisURI.Builder.redis("localhost")
                                .withSsl(true)
                                .withPassword("authentication")
                                .withDatabase(2)
                                .build();
RedisClient client = RedisClient.create(redisUri);
  •  String RedisURI
RedisURI redisUri = RedisURI.create("redis://[email protected]/2");
RedisClient client = RedisClient.create(redisUri);

// …

client.shutdown();

3. 基本使用

  • maven
<dependency>
			<groupId>biz.paluch.redis</groupId>
			<artifactId>lettuce</artifactId>
			<version>5.0.0.Beta1</version>
		</dependency>
  • 建立連線
RedisClient client = RedisClient.create("redis://localhost");

StatefulRedisConnection<String, String> connect = client.connect();
  • 同步方式
RedisCommands<String, String> commands = connect.sync(); 

String value = commands.get("foo");
  • 非同步方式
RedisAsyncCommands<String, String> redisAsync = connect.async();
		RedisFuture<String> redisFuture = redisAsync.get("a");
		try {
			String a = redisFuture.get();
			System.out.println(a);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}

RedisFuture的get方法是阻塞方法,會一直阻塞到返回結果,可以新增超時時間 

  • 關閉連線
connection.close(); 

client.shutdown(); 

4. Reactive API

懵逼ing...

5. Pub Sub

釋出訂閱的使用

6. Transactions

事務的使用

7. dynamic Redis Command Interfaces

自定義命令

8. Master Slave

主從模式的使用

9. Redis Sentinel

哨兵模式的使用

10. Redis Cluster

叢集模式的使用

11. 連線池的使用

lettuce是執行緒安全的,可以被多個執行緒同時使用,所以執行緒池不是必須的。lettuce提供了一般的連線池支援。

lettuce的連線池依賴common-pool2

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.4.3</version>
</dependency>

1. 連線池的歸還兩種方式

  • StatefulConnection.close()
  • GenericObjectPool.returnObject(…)

2. 基本使用

RedisClient client = RedisClient.create(RedisURI.create(host, port));

GenericObjectPool<StatefulRedisConnection<String, String>> pool = ConnectionPoolSupport
               .createGenericObjectPool(() -> client.connect(), new GenericObjectPoolConfig());

// executing work
try (StatefulRedisConnection<String, String> connection = pool.borrowObject()) {

    RedisCommands<String, String> commands = connection.sync();
    commands.multi();
    commands.set("key", "value");
    commands.set("key2", "value2");
    commands.exec();
}

// terminating
pool.close();
client.shutdown();

3. 叢集使用

RedisClusterClient clusterClient = RedisClusterClient.create(RedisURI.create(host, port));

GenericObjectPool<StatefulRedisClusterConnection<String, String>> pool = ConnectionPoolSupport
               .createGenericObjectPool(() -> clusterClient.connect(), new GenericObjectPoolConfig());

// execute work
try (StatefulRedisClusterConnection<String, String> connection = pool.borrowObject()) {
    connection.sync().set("key", "value");
    connection.sync().blpop(10, "list");
}

// terminating
pool.close();
clusterClient.shutdown();

相關推薦

Redis 高階 Java 客戶 Lettuce 的用法及踩坑經驗

                如果你在網上搜索 Redis 的 Java 客戶端,你會發現,大多數文獻介紹的都是 Jedis,不可否認,Jedis 是一個優秀的基於 Java 語言的 Redis 客戶端,但是,其不足也很明顯:Jedis 在實現上是直接連線 Redis-Server,在多個執行緒間共享一個

redis的java客戶lettuce的使用

從官方文件翻譯並整理的,有地方可能表述不準確 1. lettuce的介紹 lettuce是一個執行緒安全的redis客戶端。提供同步,非同步和reactive(?)的 APIs.。如果可以避開阻塞和事務型的操作比如BLPOP 和MULTI/EXEC,多個執行緒可以分享

Redis高階客戶Lettuce詳解

前提 Lettuce是一個Redis的Java驅動包,初識她的時候是使用RedisTemplate的時候遇到點問題Debug到底層的一些原始碼,發現spring-data-redis的驅動包在某個版本之後替換為Lettuce。Lettuce翻譯為生菜,沒錯,就是吃的那種生菜,所以它的Logo長這樣: 既然

Redis 客戶Lettuce配置使用(基於Spring Boot 2.x)

開發環境:使用Intellij IDEA + Maven + Spring Boot 2.x + JDK 8 Spring Boot 從 2.0版本開始,將預設的Redis客戶端Jedis替換問Lett

spring-boot 使用lettuce redis客戶

config類: package net.loyin.cloud.upms.config; import org.apac

Redis 客戶 Jedis、lettuce 和 Redisson 對比

Redis 支援多種語言的客戶端,下面列舉了部分 Redis 支援的客戶端語言,大家可以通過[官網](https://redis.io/clients)檢視 Redis 支援的客戶端詳情。 - C語言 - C++ - C# - Java - [Python](https://redis.io/clients

怎麽看域客戶是否繼承了組策略

計算機配置 組策略 windows 管理員 客戶機 https://jingyan.baidu.com/article/2fb0ba40ac413100f2ec5fde.html現在公司普遍都是域(活動目錄)環境,在域內,管理員會做一些策略對域用戶和域計算機進行管理,那麽我們如何查看域賬號

windows10 配置 華為vpn客戶

安裝客戶端 啟用 客戶 五步 安裝 資源管理器 網卡 cli windows 2017-05-08 1. 安裝客戶端軟件VPNClient_V100R001C02SPC703.exe 2. 新建vpn 安裝完成後,打開客戶端連接vpn,發現未啟用虛擬網卡(

C++傳智筆記(6):socket客戶發送報文接受報文的api接口

內存泄露 rcp 分配內存 strcpy light cpp tac 第三方 _file__ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.

Java網絡編程【Socket服務客戶

rgs .net aio highlight 如果 org author oid try Socket 編程大家都不陌生,Java 學習中必學的部分,也是 Java網絡編程核心內容之一。Java 網絡編程又包括 TCP、UDP,URL 等模塊。TCP 對應 Socket

js判斷客戶是pc還是手機

dex indexof als true symbian () bre index win function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android",

使用zabbix3.0.4的ICMP Ping模版實現對客戶網絡狀態的監控

host -1 ping 修改 cat onf 設置報警 amp 網絡狀態 一、登陸Zabbix服務器做以下操作: 1.fping安裝 wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16.

微信客戶<->騰訊微信服務器<->開發者服務器

生成 格式 一個 csdn 開發 token 增加 tro 記錄 出自 http://blog.csdn.net/hanjingjava/article/details/41653113 首先,通過Token驗證,將公眾號接入開發者服務器,這樣客戶端發給公眾號的信息會被

關於客戶設計之數據分類和存儲 的思考

service his defaults def sqli href 思想 number fault 一、關於數據的分類 在Android 客戶端設計過程中,我將數據分為未知,已知(本地),臨時,三者之間根據需求相互轉化。 未知主要來自用戶輸入和服務端輸入。 已知主

JS移動客戶--觸屏滑動事件

mov net time left 但是 屏幕 觸屏 self 偏移量 移動端觸屏滑動的效果其實就是圖片輪播,在PC的頁面上很好實現,綁定click和mouseover等事件來完成。但是在移動設備上,要實現這種輪播的效果,就需要用到核心的touch事件。處理touch事件能

基於UDT connect連接通信以及文件傳輸--客戶

文章 pan detail break fin 文件名 plain mes oca 上面一篇文章中提出了服務端的,其實這裏沒有嚴格意義的服務端和客戶端之分,因為我在代碼中是基於UDP的,不存在服務端與客戶端,兩個都是對等的,只是我這裏進行一下簡單的區分而已。在這裏,客戶端所

Linux下L2TP VPN客戶的配置

linux下xl2tpd客戶端配置系統環境centos6.81,安裝xl2tpd和pppyum -y install xl2tpd ppp2,配置xl2tpd編輯配置文件xl2tpd.confvim /etc/xl2tpd/xl2tpd.conf[lac testvpn] ;testvpn為lac的名稱n

Web服務器文件傳輸程序客戶程序實現

匹配 admin 復制 賦值 連續 反饋 sock 用戶輸入 mat 1、 客戶端程序--主函數 客戶端主程序的流程圖如下: 主程序主要是分析輸入的命令,根據不同命令調用不同的函數處理或者進行出錯處理,函數代碼如下: #include "common.h" in

如何測試你給客戶app開的接口

請求方式 測試 width 類型 tle 自動 進制數 png left 這裏介紹一款工具用於測試後臺給客戶端開的接口。 采用http或者https 采用表單或者json格式 這款工具之前是谷歌瀏覽器的一款插件,後來出現了各個平臺的客戶端。非常實用。 名叫postm

Java獲取客戶IP

不為 pty 獲取 code 中間 clas 代理服務器 gin servle 在開發工作中,我們常常需要獲取客戶端的IP。一般獲取客戶端的IP地址的方法是:request.getRemoteAddr();但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶端