J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接

Wesley13
• 阅读 973

一直以来 J2Cache 都是使用 Jedis 连接 Redis 服务的。Jedis 是一个很老牌的 Redis 的 Java 开发包,使用很稳定,作者维护很勤勉,社区上能搜到的文章也非常非常多。算是使用范围最广的 Redis 开发包。但是 Jedis 比较推出时间比较早,整个设计思路比较传统,例如不支持异步操作,接口设计比较繁琐老套(相比其他开发包而已),使用连接池占用很多的物理连接资源。当然,这个是可以理解的,比较一个比较早期的开发包,相对其做大的结构调整是很难的,而且用户也不一定会接受。

自从 2.7.0 版本开始,J2Cache 就增加了 Lettuce 的支持。Lettuce是一个可伸缩线程安全的 Redis 客户端。多个线程可以共享同一个RedisConnection。它利用优秀 Netty NIO 框架来高效地管理多个连接。

相比较 Jedis ,我觉得 Lettuce 的优点有如下几个方面:

  • 更加直观、结构更加良好的接口设计
  • 基于 Netty NIO 可以高效管理 Redis 连接,不用连接池方式
  • 支持异步操作(J2Cache 暂时没用到这个特性)
  • 文档非常详尽

不过 Lettuce 需要至少 Java 8 的支持,好在 J2Cache 也要求至少 Java 8 ,就这么愉快的决定了。

在 J2Cache 2.7.0 版本以及以后的更新版本中,想使用 Lettuce 替代 Jedis 的方法如下:

1. 修改 j2cache.properties 配置:

j2cache.broadcast = lettuce
j2cache.L2.provider_class = lettuce

2. 修改 j2cache.properties 对应的 Redis 连接信息:

lettuce.namespace =
lettuce.storage = hash
lettuce.channel = j2cache
lettuce.scheme = redis
lettuce.hosts = 127.0.0.1:6379
lettuce.password =
lettuce.database = 0
lettuce.sentinelMasterId =

其中 lettuce.scheme 包含如下几种模式:

  1. redis : 连接单个 Redis 服务
  2. rediss : 使用 SSH 连接单个 Redis 服务
  3. redis-sentinel : 连接到 Redis Sentinel 集群(结合 sentinelMasterId 进行使用)
  4. redis-cluster : 连接到 Redis Cluster

最后你还需要引入 Lettuce 的 Maven 包支持:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>5.1.1.RELEASE</version>
    <scope>provided</scope>
</dependency>

当你在启动日志中看到如下信息就表明 Lettuce 已经正常工作:

[main] INFO net.oschina.j2cache.CacheProviderHolder - Using L2 CacheProvider : net.oschina.j2cache.lettuce.LettuceCacheProvider
[main] INFO io.lettuce.core.EpollProvider - Starting without optional epoll library
[main] INFO io.lettuce.core.KqueueProvider - Starting without optional kqueue library
[main] INFO net.oschina.j2cache.cluster.ClusterPolicy - Connected to redis channel:j2cache, time 680 ms.
[main] INFO net.oschina.j2cache.J2CacheBuilder - Using cluster policy : net.oschina.j2cache.lettuce.LettuceCacheProvider

使用有任何问题欢迎到 https://gitee.com/ld/J2Cache 提交 Issue。

全文完。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
2年前
java Redis Jedis存储Java对象
Redis入门–Jedis存储Java对象(Java序列化为byte数组方式)Redis入门–Jedis存储Java对象\(Java序列化为byte数组方式)原文地址:http://alanland.iteye.com/admin/blogs/1600685(https://www.oschina.net/action/GoT
Stella981 Stella981
2年前
SpringBoot+Redis分布式锁:模拟抢单
本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:jedis的nx生成锁如何删除锁模拟抢单动作(10w个人开抢)jedis的nx生成锁
Stella981 Stella981
2年前
SpringBoot系列十:SpringBoot整合Redis
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。1、概念:SpringBoot整合Redis 2、背景Redis的数据库的整合在java里面提供的官方工具包:jedis,所以即便你现在使用的是SpringBoot,那么也继续使用此开发包。2.1、RedisTemplate模版操作在Sp
Easter79 Easter79
2年前
SpringBoot系列十:SpringBoot整合Redis
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。1、概念:SpringBoot整合Redis 2、背景Redis的数据库的整合在java里面提供的官方工具包:jedis,所以即便你现在使用的是SpringBoot,那么也继续使用此开发包。2.1、RedisTemplate模版操作在Sp
Stella981 Stella981
2年前
Redis应用学习(三)——Jedis客户端的简单使用介绍
1\.Redis的Java客户端程序——Jedis  1.在Redis的安装目录中rediscli是一个Redis的Shell语言写的客户端,通过运行该客户端就可以实现一系列Redis操作,而如果要使用Java语言的Redis客户端,就必须要使用Jedis相关的包。首先导入Jedis相关的包
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Easter79 Easter79
2年前
SpringBoot+Redis分布式锁:模拟抢单
本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:jedis的nx生成锁如何删除锁模拟抢单动作(10w个人开抢)jedis的nx生成锁