Redis实战之Lettuce使用技巧详解,真香!

网友投稿 1412 2023-04-18

Redis实战之Lettuce使用技巧详解,真香!

Redis实战之Lettuce使用技巧详解,真香!

一、摘要

Lettuce 是 Redis 的一款高级 Java 客户端,与 Jedis 并列成为最热门的客户端之一,目前已成为 SpringBoot 2.0 版本默认的 redis 客户端。

相比老牌 Jedis,Lettuce 属于后起之秀,不仅功能丰富,而且提供了很多新的功能特性,比如异步操作、响应式编程等等,同时还解决了 Jedis 中线程不安全的问题。

废话不多说了,如何使用呢?请看下文!

二、Lettuce

2.1、基本使用

首先,创建一个 maven 项目,引入​​lettuce-core​​包,就可以使用了。

io.lettuce lettuce-core 5.3.1.RELEASE

使用 lettuce 连接 redis,测试是否能正常联通!

2.2、同步操作

基本上只要是 Jedis 支持的同步命令操作,Lettuce 都支持。

下面,我们以同步操作字符串为例,Lettuce 的 api 操作如下!

2.3、异步操作

除此之外,Lettuce 还支持异步操作,将上面的操作改成异步处理,结果如下!

2.4、响应式编程

响应式编程使用案例如下:

2.5、发布和订阅

Lettuce 还支持 redis 的消息发布和订阅,具体实现案例如下:

public class LettuceReactiveMain1 { public static void main(String[] args) throws Exception { RedisURI redisUri = RedisURI.builder() .withHost("127.0.0.1").withPort(6379).withPassword("111111") .withTimeout(Duration.of(10, ChronoUnit.SECONDS)) .build(); RedisClient redisClient = RedisClient.create(redisUri); //获取发布订阅操作命令工具 StatefulRedisPubSubConnection pubsubConn = redisClient.connectPubSub(); pubsubConn.addListener(new RedisPubSubListener() { @Override public void unsubscribed(String channel, long count){ System.out.println("[unsubscribed]" + channel); } @Override public void subscribed(String channel, long count){ System.out.println("[subscribed]" + channel); } @Override public void punsubscribed(String pattern, long count){ System.out.println("[punsubscribed]" + pattern); } @Override public void psubscribed(String pattern, long count){ System.out.println("[psubscribed]" + pattern); } @Override public void message(String pattern, String channel, String message){ System.out.println("[message]" + pattern + " -> " + channel + " -> " + message); } @Override public void message(String channel, String message){ System.out.println("[message]" + channel + " -> " + message); } }); RedisPubSubAsyncCommands pubsubCmd = pubsubConn.async(); pubsubCmd.psubscribe("CH"); pubsubCmd.psubscribe("CH2"); pubsubCmd.unsubscribe("CH"); Thread.sleep(100 * 5); pubsubConn.close(); redisClient.shutdown(); }}

2.6、客户端资源与参数配置

Lettuce 客户端的通信框架集成了 Netty 的非阻塞 IO 操作,客户端资源的设置与 Lettuce 的性能、并发和事件处理紧密相关,如果不是特别熟悉客户端参数配置,不建议在没有经验的前提下凭直觉修改默认值,保持默认配置就行。

非集群环境下,具体的配置案例如下:

集群环境下,具体的配置案例如下:

2.7、线程池配置

Lettuce 连接设计的时候,就是线程安全的,所以一个连接可以被多个线程共享,同时 lettuce 连接默认是自动重连的,使用单连接基本可以满足业务需求,大多数情况下不需要配置连接池,多连接并不会给操作带来性能上的提升。

但在某些特殊场景下,比如事物操作,使用连接池会是一个比较好的方案,那么如何配置线程池呢?

2.8、主从模式配置

redis 一般采用主从复制模式,搭建高可用的架构,简单的说就一个主节点,多个从节点,自动从主节点同步最新数据。

Lettuce 支持自动发现主从模式下的节点信息,然后保存到本地,具体配置如下:

当然我们也可以手动指定集群节点来加载,具体配置如下:

2.9、哨兵模式配置

哨兵模式,也是 redis 实现服务高可用的一大亮点,具体配置实现如下:

2.10、Cluster 集群模式配置

Cluster 集群模式,是之后推出的一种高可用的架构模型,主要是采用分片方式来存储数据,具体配置如下:

三、小结

Lettuce 相比老牌的 Jedis 客户端,功能更加强大,不仅解决了线程安全的问题,还支持异步和响应式编程,支持集群,Sentinel,管道和编码器等等功能。

内容难免有所遗漏,欢迎网友批评指出!

四、参考

1、博客园 - throwable - Redis高级客户端Lettuce详解

2、[博客园 - 且行且码 - Redis入门实战(5)-lettuce操作redis

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:搞定 Redis 数据存储原理,别只会Set、Get 了
下一篇:多数据库Citus集群的维护
相关文章