jedis的扩展

发布 : 2019-04-21 分类 : 工具类 浏览 :

jedis的扩展

前言

会有一系列的文章介绍common-*.jar的各种用法,这些工具类jar包都已上传在maven中央库。可以直接通过maven坐标引入使用。源码可以参见:https://gitee.com/rjzjh/common

jedis的不足

jedis是redis的一款java客户端,对redis连接进行了池化,把短连接改为长连接,减小了网络连接的消耗,在项目中使用也比较多。但jedis也存在一些使用不方便的地方.

  • 需要手动关闭jedis连接,如果代码中存在异常跳过了jedis连接关闭的代码,那就存在连接泄漏的问题

  • redis的独立模式 与 哨兵模式、集群模式使用时使用的池都不样,一般来说我们开发、测试环境使用redis独立模式而生产环境使用哨兵模式或集群模式。这时我们的代码就不能做到统一。

  • jedis提供的api都是较为原始的,如取值都是基本类型。但在java中往往需要能直接把redis的数据直接变为我们的javaBean对象,这样才更为方便。

common-redis依赖包

commons工具系统中,common-redis依赖包就是为了解决jedis上面的不足而写的,它的maven坐标为:

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/net.wicp.tams/common-redis -->
<dependency>
<groupId>net.wicp.tams</groupId>
<artifactId>common-redis</artifactId>
<version>最后版本</version>
</dependency>

它有一些默认配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#Redis配置
common.redis.redisserver.host=localhost
common.redis.redisserver.port=6379
#哨兵模式,如果配置则优先启用它
common.redis.redisserver.masterName=null
#逗号分隔 ****:6374,****:6374,*****:6374
common.redis.redisserver.sentinelAry=null
#创建池的超时时间
common.redis.redisserver.timeout=2000
#获取Jedis连接的最大等待时间(10秒)
common.redis.redisserver.maxWaitMillis=10000
#设置最大连接数
common.redis.redisserver.maxTotal=200
#最大空闲连接数
common.redis.redisserver.maxIdle=20
#在将连接放回池中前
common.redis.redisserver.testOnBorrow=true
#自动测试池中的空闲连接是否都是可用连接
common.redis.redisserver.testWhileIdle=true
common.redis.redisserver.defaultDb=0
common.redis.redisserver.password=null
#最小连接数
common.redis.redisserver.minIdle=0
common.redis.redisserver.minEvictableIdleTimeMillis=13000
common.redis.redisserver.softMinEvictableIdleTimeMillis=13000
common.redis.redisserver.numTestsPerEvictionRun=3
common.redis.redisserver.testOnReturn=false
common.redis.redisserver.timeBetweenEvictionRunsMillis=60000
common.redis.redisserver.blockWhenExhausted=true
#判断连接泄漏的秒数,默认为10秒,<=0 为不需要判断泄漏
common.redis.redisserver.leak.second=10
#设置客户端名称
common.redis.redisserver.clientName=tams

如果masterName和sentinelAry被配置将会被认为起用哨兵模式,如果这两个配置只要有一个为null表示启用独立的redis实例,无HA,这通常用于开发或是环境环境。

如果你的系统与默认配置不一致,你可以参考

修改你的配置,你可以像如下代码一样进行配置的修改:

1
2
3
Properties props = new Properties();
props.put("common.redis.redisserver.host", "192.168.137.100");
Conf.overProp(props);

使用示例

参考下面独立模式与哨兵模式的连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Test
public void standalone() {
AbsPool standalone = RedisAssit.standalone("redis3-test", 6381,null);
Jedis jedis = standalone.getResource();
Long db = jedis.getDB();
System.out.println(db);
}

@Test
public void sentinel() {
AbsPool sentinel = RedisAssit.sentinel("master01",
new String[] { "10.50.3.79:27000", "10.50.3.79:27001", "10.50.3.79:27002" });
Jedis jedis = sentinel.getResource();
Long db = jedis.getDB();
System.out.println(db);
}

如果使用cachecloud来管理redis实例可以像如下得到连接,最后都是返回AbsPool池:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Test
public void standalone() {
Properties props = new Properties();
props.put("common.redis.cachecloud.domain_url", "http://localhost:9218");
Conf.overProp(props);
AbsPool standalone = CacheCloudAssit.standalone(10000);
Jedis jedis = standalone.getResource();
Long db = jedis.getDB();
System.out.println("db=" + db);
AbsPool.returnResource(jedis);
}

@Test
public void sentinel() {
Properties props = new Properties();
props.put("common.redis.cachecloud.domain_url", "http://localhost:9218");
Conf.overProp(props);
AbsPool sentinel = CacheCloudAssit.sentinel(10001);
Jedis jedis = sentinel.getResource();
Long db = jedis.getDB();
System.out.println("db=" + db);
}

如果你的项目使用了springboot,那更简单,只需引用依赖包:

1
2
3
4
5
     <dependency>
<groupId>net.wicp.tams</groupId>
<artifactId>common-spring-autoconfig</artifactId>
<version>最后版本</version>
</dependency>

然后你需要在你的配置中心(或springboot配置文件)中配置好上面那些属性,只要与它配置项相同,此依赖包就会把spring所管理的配置项覆盖依赖包的默认配置项。此依赖包支持的配置中心有consul、apollo、configserver、bootstrap配置文件、application配置文件。更具体需要参考:

一节。配置完配置项后,在spring就可以直接使用使用注解注入“net.wicp.tams.common.redis.pool.AbsPool”这个bean就可以了。这个池会有很多的工具类,帮助项目把redis存储的值和javaBean进行互转。见下图:

更具体的使用需要看参考源码:https://gitee.com/rjzjh/common

本文作者 : andy.zhou
原文链接 : https://rjzjh.gitee.io/2019/04/21/common/common-jedis/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹