Redis
发布时间:2019-11-02 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Redis客户端——Jedis的使用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本文介绍基于Java语言的redis客户端——jedis的使用,包括jedis简介、获取jedis、jedis直连、jedis连接池以及二者的对比的选择。
jedis简介
jedis 是 官方首选的基于Java语言的客户端开发包。Jedis功能强大,提供了完整Redis命令,与 Redis 2.8.x,3.x.x及以上版本完全兼容。而且使用简单方便,绝对是Java语言的首选客户端。
获取Jedis
获取Jedis可以在 下载最新的版本;或者引入Maven依赖:
696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@redis.CLIENts696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@jedis696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@3.0.1696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@jar696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@compile696_8@696_8@@H_696_8@
696_8@696_8@@H_696_8@
@H_772_57@
@H_772_57@
jedis直连
jedis直连需要生成
jedis对象,
这个对象负责和指定
redis节点进行通信。@H_
772_57@
jedis
jedis =
696_8@ jedis("127.0.0.1",6379);
@H_772_57@
然后就可以进行基本操作:
@H_
772_57@
jedi
s.set("
Hello","world"
);
jedis.get(@H_696_8@"Hello");
jedis.incr(@H_696_8@"counter");
@H_772_57@
@H_772_57@
@H_
772_57@
jedi
s.hset("myhash","f1","v1"
);
jedis.hset(@H_696_8@"myhash","f2","v2");
jedis.hgetAll(@H_696_8@"myhash");
@H_772_57@
@H_772_57@
@H_
772_57@
jedi
s.rpush("mylist","1"
);
jedis.rpush(@H_696_8@"mylist","2");
jedis.rpush(@H_696_8@"mylist","3");
jedis.lrange(@H_696_8@"mylist",-1);
@H_772_57@
@H_772_57@
@H_
772_57@
jedi
s.sadd("myset","a"
);
jedis.sadd(@H_696_8@"myset","b");
jedis.sadd(@H_696_8@"myset","a");
jedis.smember(@H_696_8@"myset");
@H_772_57@
@H_772_57@
@H_
772_57@
jedi
s.zadd("myzset",99,"alan"
);
jedis.zadd(@H_696_8@"myzset",88,"paul");
jedis.zadd(@H_696_8@"myzset",77,"077");
jedis.zrangeWithScores(@H_696_8@"myzset",-1);
@H_772_57@
jedis连接池
什么是连接池?举个类比,线程池是把线程放到便于统一管理的容器里面,那么连接池就是把连接放到一个容器里面,方便连接的管理和使用,达到节省系统资源开销和时间的效果。
如果没有连接池,在实际应用开发中,每一次jedis请求都必须经历生成jedis对象、jedis执行命令、jedis返回执行结果和关闭jedis连接等步骤,而新建jedis对象,然后新建连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。如果运用池化技术,将连接作为对象存储在一个容器中(连接池),一旦连接池建立后,这些连接是共享的,极大地节省系统资源和时间,这就是jedis连接池。如果之前已经了解过线程池,我想这儿看着会相当轻松写意。@H_696_8@
jedis连接池使用主要有以下几个步骤:创建连接池池、向连接池借jedis对象、jedis执行命令、返回执行结果、归还jedis对象给连接池。具体代码如下:
创建jedis连接池并初始化:
GenericOb
jectPoolConfig poolConfig =
696_8@jectPoolConfig();
jedisPool jedisPool @H_696_8@= 696_8@ jedisPool(poolConfig,"127.0.0.1",6739);
@H_772_57@
可以看到,jedisPool大部分配置都在GenericObjectPoolConfig中完成的,GenericObjectPoolConfig参数说明如下表:
参数@H_772_57@
参数说明@H_772_57@
@max@R_984_10586@l@H_772_57@
最大连接数,默认8个。@H_772_57@
@maxIdle@H_772_57@
最大空闲连接数, 默认8个。@H_772_57@
@minIdle@H_772_57@
最小空闲连接数,默认0个。@H_772_57@
@maxWaitMillis@H_772_57@
当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出jedisConnectionException。@H_772_57@
testOnBorrow@H_772_57@
在borrow一个jedis实例时,是否提前检查连接可用性(ping())操作;如果为true,则得到的jedis实例均是可用的。默认为false。@H_772_57@
blockWhenExhausted@H_772_57@
连接耗尽时是否阻塞,false报异常,ture阻塞直到超时,默认true。@H_772_57@
testOnReturn@H_772_57@
在return一个jedis实例时,是否检查连接可用性(ping()),默认为false。@H_772_57@
testWhilEIDle@H_772_57@
如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉。@H_772_57@
这一项只有在time
betweenEvictionRunsMillis大于0时才有意义。@H_
772_57@
@minEvictabl
EIDleTimeMillis@H_
772_57@
表示一个对象至少停留在idle状态的最短时间,然后才能被idle ob
ject evitor扫描并驱逐。这一项只有在time
betweenEvictionRunsMillis大于0时才有意义。@H_
772_57@
jedisPoolConfig中默认设置为60000。@H_
772_57@
time
betweenEvictionRunsMillis@H_
772_57@
@H_
772_57@
表示idle ob
ject evitor两次扫描之间要sleep的毫秒数,默认设置为30000。@H_
772_57@
创建和初始化jedis连接池以后,可以从jedis连接池中获取jedis对象,进而进行操作:
jedis
jedis =
696_8@696_8@696_8@{
@H_696_8@696_8@jedis对象@H_696_8@
jedis =jedisPool.getresource();
@H_696_8@696_8@696_8@
jedis.set("Hello","world");
}@H_696_8@696_8@E){
e.printStackTrace();
}@H_696_8@696_8@{
@H_696_8@696_8@(jedis != 696_8@{
@H_696_8@696_8@696_8@
jedis.close();
}
}@H_696_8@
@H_772_57@
如何选择
jedis直连和使用jedis连接池各有所长,可以根据生产环境的需要因地制宜。
如果是少量的连接,并且每次连接时间较长,适合使用jedis直连的方式。
如果是较为频繁的连接则使用jedis连接池。
简单方便
用于少量长期连接的场景
每次新建/关闭TCP开销较大
资源无法控制,存在连接泄漏的可能
jedis对象线程不安全
jedis预先生成,降低开销使用
连接池的形式保护和控制资源的使用
相对于直连,使用相对麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题
772_57@
@H_772_57@
大佬总结
以上是大佬教程为你收集整理的Redis客户端——Jedis的使用全部内容,希望文章能够帮你解决Redis客户端——Jedis的使用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: