Redis的客户端Jedis
Jedis所需要的jar包
<!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.8.0</version></dependency
测试连通性
package com.lcy.Test;import redis.clients.jedis.Jedis;public class JedisTest {public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1", 6379);//查看服务是否运行,打出pong表示OKSystem.out.println("connection is OK==========>: " + jedis.ping());}
}
连接成功
Jedis常用操作
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;public class Test03
{public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1",6379);//监控key,如果该动了事务就被放弃/*3jedis.watch("serialNum");jedis.set("serialNum","s#####################");jedis.unwatch();*/Transaction transaction = jedis.multi();//被当作一个命令进行执行Response<String> response = transaction.get("serialNum");transaction.set("serialNum","s002");response = transaction.get("serialNum");transaction.lpush("list3","a");transaction.lpush("list3","b");transaction.lpush("list3","c");transaction.exec();//2 transaction.discard();System.out.println("serialNum***********"+response.get());}
}
JedisPool
获取Jedis实例需要从JedisPool中获取,用完jedis实例需要返还给JedisPool。如果jedis在使用的过程中出错,则也需要还给JedisPool
JedisPoolUtil .class
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;public class JedisPoolUtil {private static volatile JedisPool jedisPool = null;//被volatile修饰的变量不会被本地线程缓存,对该变量的读写都是直接操作共享内存。private JedisPoolUtil() {}public static JedisPool getJedisPoolInstance(){if(null == jedisPool){synchronized (JedisPoolUtil.class){if(null == jedisPool){JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxActive(1000);poolConfig.setMaxIdle(32);poolConfig.setMaxWait(100*1000);poolConfig.setTestOnBorrow(true);jedisPool = new JedisPool(poolConfig,"127.0.0.1");}}}return jedisPool;}public static void release(JedisPool jedisPool,Jedis jedis){if(null != jedis){jedisPool.returnResourceObject(jedis);}}
}
Test01.class
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;public class Test01 {public static void main(String[] args) {JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.set("k18","v183");} catch (Exception e) {e.printStackTrace();}finally{JedisPoolUtil.release(jedisPool, jedis);}}
}
配置总结:
JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。
maxActive:控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。
maxIdle:控制一个pool最多有多少个状态为idle(空闲)的jedis实例;
whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作;默认有三种。
WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException;
WHEN_EXHAUSTED_BLOCK --> 则表示阻塞住,或者达到maxWait时抛出JedisConnectionException;
WHEN_EXHAUSTED_GROW --> 则表示新建一个jedis实例,也就说设置的maxActive无用;
maxWait:表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛JedisConnectionException;
testOnBorrow:获得一个jedis实例的时候是否检查连接可用性(ping());如果为true,则得到的jedis实例均是可用的;
testOnReturn:return 一个jedis实例给pool时,是否检查连接可用性(ping());
testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数;
numTestsPerEvictionRun:表示idle object evitor每次扫描的最多的对象数;
minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少minIdle个对象已经在pool里面了。如果为-1,evicted不会根据idle time驱逐任何对象。如果minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义;
lifo:borrowObject返回对象时,是采用DEFAULT_LIFO(last in first out,即类似cache的最频繁使用队列),如果为False,则表示FIFO队列;
其中JedisPoolConfig对一些参数的默认设置如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1
Redis的客户端Jedis相关推荐
- redis客户端Jedis和Luttuce的区别,并使用springboot整合
Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server.也就是说这两种都可以是redis的客户端. Jedis Jedis在实现上是直接连 ...
- jedis使用_Redis --Java客户端 Jedis
Redis --Java客户端 Jedis 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 Jedis: 一款java操作 ...
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍(转)
[-] 一普通同步方式 二事务方式Transactions 三管道Pipelining 四管道中调用事务 五分布式直连同步调用 六分布式直连异步调用 七分布式连接池同步调用 八分布式连接池异步调用 九 ...
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍--转载
原文地址:http://www.blogways.net/blog/2013/06/02/jedis-demo.html redis是一个著名的key-value存储系统,而作为其官方推荐的java版 ...
- redis java客户端配置,Java的Redis客户端选择-jedis与Lettuce
Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线 ...
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
一.普通同步方式 二.事务方式(Transactions) 三.管道(Pipelining) 四.管道中调用事务 五.分布式直连同步调用 六.分布式直连异步调用 七.分布式连接池同步调用 八.分布式连 ...
- java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...
- Redis客户端 Jedis 与 Lettuce
Lettuce 和 Jedis 的定位都是 Redis 的 client,所以它们可以直接连接redis server. Jedis 在实现上是直接连接的 redis server,如果在多线程环境下 ...
- 自己动手写一个能操作redis的客户端
作者:孤独烟 来自:http://rjzheng.cnblogs.com/ 引言 redis大家在项目中经常会使用到.官网也提供了多语言的客户端供大家操作redis,如下图所示 但是,大家有思考过,这 ...
最新文章
- 2021年大数据Spark(三十三):SparkSQL分布式SQL引擎
- 2015.4.10-SQL 高级查询(二)
- 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
- opencv 解析yuv_OpenCV Mat格式存储YUV图像
- 前端学习(1559):ng-classt隔行变色
- JS_11正则表达式和字符串方法
- linux之切换用户su(switch user)
- Redis 6.0 源码阅读笔记(6) -- Set 数据类型源码分析
- 显示已暂停_美国大学这类研究生项目真的要凉?盘点美国暂停招生的研究生项目~...
- 前轮转向最大角度设计原来_转向系统的工作原理
- 前端自动化构建工具gulp的使用介绍
- 计算与编程思维-Python实践【Python Crash Course】
- AI 编辑视频!这特效太逆天了!代码开源 SIGGRAPH Asia 2021
- DM642的PCI驱动编程笔记:遍历一块内存空间的源码
- Python学习记录(一)
- 将android程序写入内存,android中将数据写入手机内存和sdcard中的文件
- 《用户至上:用户研究方法与实践(原书第2版)》一1.1 什么是用户体验
- php 图片印章_给图片加字,印章在线生成
- 百度云直链下载-Aria2(二)
- Android ocr识别文字介绍(文字识别)