Redis客户端——Jedis的使用
本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介、获取Jedis、Jedis直连、Jedis连接池以及二者的对比的选择。
Jedis简介
Jedis 是 Redis 官方首选的基于Java语言的客户端开发包。Jedis功能强大,提供了完整Redis命令,与 Redis 2.8.x, 3.x.x及以上版本完全兼容。而且使用简单方便,绝对是Java语言的首选客户端。
获取Jedis
获取Jedis可以在 http://github.com/xetorthio/jedis/releases下载最新的版本;或者引入Maven依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Jedis直连
Jedis jedis = new Jedis("127.0.0.1",6379);
然后就可以进行基本操作:
- string
jedis.set("hello","world");
jedis.get("hello");
jedis.incr("counter");
- hash
jedis.hset("myhash","f1","v1");
jedis.hset("myhash","f2","v2");
jedis.hgetAll("myhash");
- list
jedis.rpush("mylist","1");
jedis.rpush("mylist","2");
jedis.rpush("mylist","3");
jedis.lrange("mylist",0,-1);
- set
jedis.sadd("myset","a");
jedis.sadd("myset","b");
jedis.sadd("myset","a");
jedis.smember("myset");
- zset
jedis.zadd("myzset",99,"alan");
jedis.zadd("myzset",88,"paul");
jedis.zadd("myzset",77,"077");
jedis.zrangeWithScores("myzset",0,-1);
Jedis连接池
什么是连接池?举个类比,线程池是把线程放到便于统一管理的容器里面,那么连接池就是把连接放到一个容器里面,方便连接的管理和使用,达到节省系统资源开销和时间的效果。
如果没有连接池,在实际应用开发中,每一次Jedis请求都必须经历生成Jedis对象、Jedis执行命令、Jedis返回执行结果和关闭Jedis连接等步骤,而新建Jedis对象,然后新建连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。如果运用池化技术,将连接作为对象存储在一个容器中(连接池),一旦连接池建立后,这些连接是共享的,极大地节省系统资源和时间,这就是Jedis连接池。如果之前已经了解过线程池,我想这儿看着会相当轻松写意。
Jedis连接池使用主要有以下几个步骤:创建连接池池、向连接池借Jedis对象、Jedis执行命令、返回执行结果、归还Jedis对象给连接池。具体代码如下:
创建Jedis连接池并初始化:
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig,"127.0.0.1",6739);
可以看到,JedisPool大部分配置都在GenericObjectPoolConfig中完成的,GenericObjectPoolConfig参数说明如下表:
|
参数
|
参数说明
|
|
maxTotal
|
最大连接数,默认8个。
|
|
maxIdle
|
最大空闲连接数, 默认8个。
|
|
minIdle
|
最小空闲连接数,默认0个。
|
|
maxWaitMillis
|
当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException。
|
|
testOnBorrow
|
在borrow一个jedis实例时,是否提前检查连接可用性(ping())操作;如果为true,则得到的jedis实例均是可用的。默认为false。
|
|
blockWhenExhausted
|
连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true。
|
|
testOnReturn
|
在return一个jedis实例时,是否检查连接可用性(ping()),默认为false。
|
|
testWhileIdle
|
如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉。
这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义。
|
|
minEvictableIdleTimeMillis
|
表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐。这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义。
JedisPoolConfig中默认设置为60000。
|
|
timeBetweenEvictionRunsMillis
|
表示idle object evitor两次扫描之间要sleep的毫秒数,默认设置为30000。
|
创建和初始化Jedis连接池以后,可以从Jedis连接池中获取Jedis对象,进而进行操作:
Jedis jedis = null;
try{
//1.从连接池获取jedis对象
jedis = jedisPool.getResource();
//2.执行操作
jedis.set("hello","world");
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
//归还连接池
jedis.close();
}
}
如何选择
Jedis直连和使用Jedis连接池各有所长,可以根据生产环境的需要因地制宜。
如果是少量的连接,并且每次连接时间较长,适合使用Jedis直连的方式。
如果是较为频繁的连接则使用Jedis连接池。
| 优点 | 缺点 | |
| 直连 |
|
|
| 连接池 |
|
|
Redis客户端——Jedis的使用的更多相关文章
- redis 学习(8)-- redis 客户端 -- Jedis
redis 客户端 -- Jedis 1. Jedis 直连 本质是 TCP 连接. 执行流程 创建Jedis对象 通过Jedis执行命令 返回Jedis执行结果 关闭Jedis连接 demo 要使用 ...
- spring 集成redis客户端jedis(java)
spring集成jedis简单实例 jedis是redis的java客户端,spring将redis连接池作为一个bean配置. “redis.clients.jedis.JedisPool”,这 ...
- spring 5.x 系列第8篇 —— 整合Redis客户端 Jedis和Redisson (代码配置方式)
文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件和其映射类 2.2 ...
- spring 5.x 系列第7篇 —— 整合Redis客户端 Jedis和Redisson (xml配置方式)
文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件 2.2 单机配置 ...
- Java操作redis客户端Jedis使用
1.1 jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...
- Redis 客户端 Jedis、lettuce 和 Redisson 对比
Redis 支持多种语言的客户端,下面列举了部分 Redis 支持的客户端语言,大家可以通过官网查看 Redis 支持的客户端详情. C语言 C++ C# Java Python Node.js PH ...
- 深入剖析Redis客户端Jedis的特性和原理
一.开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎.Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式. Redis的Java生态的客户端当中包含Jedis.Rediss ...
- redis客户端jedis连接和spring结合
摘自传智博客课程 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt ...
- Java操作redis客户端Jedis连接集群(Cluster)
创建JedisCluster类连接redis集群. @Test public void testJedisCluster() throws Exception { //创建一连接,JedisClust ...
随机推荐
- gawk编程语言
gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...
- 根据appId匹配项目名称
有时候后端返回的接口中也许没有我们想要的字段,可以通过下面的方式拿到想要的字段 代码如下: //获取项目名称 getBizName(appId) { let proNameList = this.$s ...
- VirtualBox报错:不能为虚拟电脑XXX打开一个新任务
报错产生的背景 今天在这里下载了一个用于VirtualBox的Kali Linux虚拟机文件(使用VirtualBox可以直接打开使用,不用执行安装过程).但是将该文件导入到VirtualBox中之后 ...
- [求教]利用typescript对Javascript做强类型检测提示
近期在学习typescript的时候,发现ts居然可以对原生js做强检测.发现从v2.3就开始直接了.这让我感叹他的变化,又让我自己感到学习的缓慢.本文章就对他小试牛刀一下. 一.他是的使用与支持 通 ...
- 使用wordpress搭建自己的独立博客
最近想要搭建自己的私人博客, 各种百度,完整的搭建步骤如下! 首先得要有自己的vps或者云主机,我这里是自己的云主机,有自己的域名(我这边目前没有买域名)! 搭建步骤! 1,安装lnmp(linux+ ...
- QM
答案: C 解题: 1. PV = 1,2 / 11% = 10.91 NPV = PV(inflow)-PV(outflow) = 10.91 - 8 = 2.91 2. IRR : NPV = 0 ...
- Goroutine陷阱
Go在语言层面通过Goroutine与channel来支持并发编程,使并发编程看似变得异常简单,但通过最近一段时间的编码,越来越觉得简单的东西,很容易会被滥用.Java的标准库也让多线程编程变得简单, ...
- BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP
BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他 ...
- BZOJ_3585_mex && BZOJ_3339_Rmq Problem_主席树
BZOJ_3585_mex && BZOJ_3339_Rmq Problem_主席树 Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区 ...
- BZOJ_[JSOI2010]Group 部落划分 Group_kruskal
BZOJ_[JSOI2010]Group 部落划分 Group_kruskal Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人 ...