J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接
一直以来 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 包含如下几种模式:
- redis : 连接单个 Redis 服务
- rediss : 使用 SSH 连接单个 Redis 服务
- redis-sentinel : 连接到 Redis Sentinel 集群(结合 sentinelMasterId 进行使用)
- 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。
全文完。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
go http 框架性能大幅下降原因分析
最近在开发一个web 框架,然后业务方使用过程中,跟我们说,压测qps 上不去,我就很纳闷,httprouter + net/http.httpserver , 性能不可能这么差啊,网上的压测结果都是10w qps 以上,几个middleware 至于将性能拖垮?后来一番排查,发现些有意思的东西。 首先,我就简单压测hello world, 每个请求进来,我日志都不打,然后,打开pprof ,显示的情况如下: 这里futex 怎么这么高?看着上面的一些操作,addtimer, deltimer 我想到以前的自己实现的定时器,这估计是超时引起的。然后检查版本,go1.9, 然后框架默认为每个conn 设置了4个timeout,readtimeout, writetimeout, idletimeout, headertimeout ,这直接导致了定时器在添加和删除回调的时候,锁的压力特别大。 下面我们分析下,正常的加超时操作,到底发生了些什么,下面是个最简单的例子,为了安全,每个连接设置超时。 package main import ( "fmt" "github....
- 下一篇
Android JNI开发系列(十一) JNI 访问父类的构造方法和父类实例方法
JNI 访问父类的构造方法和父类实例方法 构造方法和父类实例方法 先看一段Java代码, Java package org.professor.jni.animal; import android.util.Log; public class Animal { protected String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void eat() { Log.i("ANIMAL", "ANIMAL EAT FOOD"); } } package org.professor.jni.animal; import android.util.Log; public class Bird extends Animal { public Bird(String name) { super(name); Log.i("...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题