序言

本文意在介绍 redis 的非阻塞客户端 lettuce 的用法,比起jedis 客户端来说, lettuce 的异步特性和 底层的 nio 异步加持,显得 更加好用且高性能。

正文

关于远程 客户端 代码连接的通用设计的思考

常见 客户端连接的通用逻辑,redis 客户端 lettuce 也遵循了通常的连接流程

  1. 构建 连接 connect uri , 根据不同的客户端,schema 有所不同,类似 mysql 的连接schema 以 mysql:://  开始,而redis 连接schema 以 redis:// 开始
  2. 通过 connect uri 构造 连接 client
  3. 根据连接 client,构建 connection,每个connection 对不同的操作应该是不同的,而client 资源确是共享同步的
  4. 一般来说拿到connection 以后,就可以就行命令传递了,一般来说较为方便的连接客户端,会提供较为方便的连接操作,类 lettuce ,每个connect 需要进行的命令传递操作,在此基础上

抽象出 COMMAND 对象,每个COMMAND 就是 redis client 的COMMAND 抽象

5. 还有一点时,由于connection 的获取是需要付出一定代价的,所以现代客户端,都很喜欢配合 池化技术,节省一部分这样的开销,利用共享连接池, 例如 apache 的common pool 来进行配置池,可以猜想只要是用的是 cs 模型的基础组件,

我们在配置的时候就可以考虑,是否在客户端进行远端链接的时候进行池化技术的优化。

在此抽象概括下,连接客户端的一些通用设计理念,在此基本基础上的连接逻辑

  1. 首先我们要进行客户端远程命令的代码执行,connection 这个概念是各个 连接客户端都绕不过去的,为了生成这个connection, 像spring-redis 为例,spring-redis 里面的 redisTemplate 里面需要配置好 connectFactory,然后进行获取每次命令执行

的连接操作,而此时 的redisTemplate 可以认为是 lettuce里面的 client角色,是为了拿到connection的存在,拿到connection之后,可能在此基础上进行 命令传递的操作,然后在此基础上 spring-redis 抽象出了 Operation 的概念,各种对redis不同数据结构的操纵

都可以通过Operation 的api 来操纵,然后传递给远端 redis server

2. 以 java mysql connector 客户端举例的话,同样可以看到 这么几个角色, 首先是DriverManager ,类比上图,这其实就是 Client的角色,用来获取Connection的。拿到Connection以后, 要执行sql 命令了,怎么操作你,它在Connection传递命令的前提下

抽象出来 Statement这个概念,可以认为这个Statement就是一次事务或者读操作,类似于lettuce的 COMMAND角色,然后结果用ResultSet进行存储,以此可知。

3.  像 kafka 的客户端, spring kafka 的客户端设计, 其中 消费监听者这样的角色比较不同,因为生产消费者,涉及到的命令比较少,所以在消费端直接就通过 注解 @KafkaListener 加在方法上的方式来直接监听messager了,而生产者 对mq生产消息的方式是通过KafkaTemplate

的方式来执行的,此 KafkaTemplate 的构成 也是需要知道远端mq的连接方式的,其内部构成为需要 ProducerFactory来组成,这个ProduceFactory 类似于 lettuce Client的存在了,相当于每次发送 message 给mq ,都要新产生一个网络连接,产生连接,名字也和Factory相互照应。

像常见的 解码器和编码器也需要在 Template 这一层进行配置,在此不表,像RedisTemplate也是同样的设计理念。 KafkaTrancationManager 和 mysql 的TrancationManager 的角色类似,当配置也是同样的 需要 produceFactory 进行配置, TrancationMnager → ProduceFactory,

像KafkaTrancationManger的使用意义在于,和数据库一样,在@Transaction 修饰的方法上,如果抛异常,则消息不会发送

4.  以 es 举例的话,官网提供的 es 的客户端,特定维护了两个版本,一个 是low level 为了兼容所有版本的es, 一个是high level 的 rest client , 以high level 的 client 来看,它同样是是以client 角色,来执行 命令的Request 封装,得到一个Response,在此就忽略了 Connection 这样的概念,封装在Client 的请求里面

lettuce 支持的 基本操作语法支持,和接口设计抽象

lettuce 支持三种范式调用

  1. 同步 2.异步 3. react 式

2. 单机和集群的 connection, pub 和sub connection 分别获取

redis 客户端 -- lettuce 介绍相关推荐

  1. 闲谈Redis客户端Lettuce

    简介 Lettuce是一个高性能基于Java编写的Redis驱动框架,底层集成了Project Reactor提供天然的反应式编程,通信框架集成了Netty使用了非阻塞IO,5.x版本之后融合了JDK ...

  2. Redis客户端Lettuce源码【一】Jedis vs Lettuce

    文章目录 基本实现对比 性能对比 Jedis的基本用法 Jedis配合Springboot RedisTemplate使用 Lettuce的基本用法 Lettuce配合Springboot Redis ...

  3. redis客户端predis介绍

    README.markdown 官方介绍 # Predis # ## About ## Predis is a flexible and feature-complete PHP (>= 5.3 ...

  4. Redis高级客户端Lettuce详解

    前提 Lettuce是一个Redis的Java驱动包,初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码,发现spring-data-redis的驱动包在某个版本之 ...

  5. Redis 高级 Java 客户端 Lettuce 的用法及踩坑经验

    如果你在网上搜索 Redis 的 Java 客户端,你会发现,大多数文献介绍的都是 Jedis,不可否认,Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显:Je ...

  6. springboot项目中redis客户端(Jedis、Lettuce、Redisson)

    一.redis客户端的对比 1).Jedis Jedis作为Redis官方推荐的一款客户端,也算是简单好用,基础功能齐全,在中小型项目中还是很好用的,但是Jedis是直连模式,在多个线程间共享一个Je ...

  7. 慢连接 java_记一次redis的java客户端lettuce操作慢的解决方案

    因为项目业务需要,我们要把数据库中的大量数据缓存到redis中,并且会随时更新缓存,刚开始更新频率是1Hz,没有什么问题,后来更新频率达到了5Hz,lettuce开始疯狂报错:redis comman ...

  8. 操作Redis客户端工具详解之功能介绍及配置

    问题背景 日常开发过程中,对于缓存,我们并不陌生.常用的缓存有个Redis.memcache.memcached等.那么操作缓存的工具又有很多,我们该怎么选择呢? 今天我们聊一下Redis的操作客户端 ...

  9. Redisson--最好用的Redis客户端--介绍

    原文网址:Redisson--最好用的Redis客户端--介绍_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Redisson这款最好用的Redis客户端. 官网 官网:Redisson: R ...

  10. Redis的Java客户端Lettuce简介

    环境 操作系统:Ubuntu 20.04 Redis:6.2.6 开发工具:IntelliJ IDEA 2022.1 (Community Edition) Lettuce的官网( https://l ...

最新文章

  1. idea配置 Tomcat Deployment添加时没有Artifact...选择的解决方案
  2. 架构设计之「 微服务入门 」
  3. sqlerror.java 1074_java.sql.SQLException: Before start of result set异常
  4. win11怎么去除快速搜索 Windows11去除快速搜索的步骤方法
  5. 基于nodejs,tinypng的压缩图片工具
  6. GDB 调试器使用手册
  7. Ubuntu下载安装CUDA
  8. 【HITB GSEC CTF 2017】1000levels
  9. 如何做拉新活动?拉新裂变的12种玩法,你学废了没?
  10. 骗子、假先知们一夜暴富背后:区块链是回归互联网本来意义的唯一希望|深度
  11. 提供几本WEB前端开发电子书(2012/10/31更新)
  12. 三星“掌门人”李在镕身在看守所 但仍“遥控”三星
  13. VLAN、Trunk概述和三层交换机原理
  14. java调用ltp_LTP随笔——本地调用ltp之ltp4j
  15. Android 自定义Activity的主题
  16. 分析QQ微信使用的是UDP还是TCP协议
  17. 数据结构通过链表实现班级同学通讯录
  18. Java使用ffmpeg实现从视频中提取音频 (mp4、mp3)
  19. 新年来临最后一天听到了职业培训新的声音
  20. 洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解

热门文章

  1. 看了扎克伯格的Avatar,我更想在VR里当大猩猩
  2. 怎么学好html5和css3,如何提高你的CSS水平
  3. Shiro介绍(四):定义自己的安全域Realm
  4. UVa 12307 Smallest Enclosing Rectangle(旋转卡壳+最小覆盖矩形)
  5. spring mvc 404 报错记录
  6. php mysql primary key_MySQL_简单分析MySQL中的primary key功能,在5.1.46中优化器在对primary key - phpStudy...
  7. 【图像重建】基于Split Bregman实现稀疏图像重建附matlab代码
  8. 随机子空间(RSM)
  9. 蒟蒻信安笔记4:CTF实践
  10. java制作进度条,Java制作进度条