连接Redis
Java连接Redis
需要引入相关jar包,需要引入相关jar包,从maven官网中查找Jedis并下载,以及下载相关依赖(commons-pool2和slf4j-api等测试依赖)包导入项目即可
注意多重依赖
- log4j-slf4j-impl依赖log4j-api
- log4j-api依赖log4j-core
- commons-pool2还依赖cglib
- cglib依赖ams、ant和junit
直连方式
步骤
- 创建Jedis对象
- 通过Jedis执行命令,返回Jedis执行结果(所有的方法名与redis-cli客户端的一致)
- 关闭Jedis连接
代码
Jedis jedis = null;
try {
jedis = new Jedis("127.0.0.1", 6379); //还有一些其他重载的构造方法来设置本次连接的参数
//1. 创建Jedis对象,指定IP和端口
jedis.auth("redis"); //操作数据前设置的密码
jedis.set("hello", "world");
String hello = jedis.get("hello");
System.out.println(hello); //world
//2. 执行命令,返回结果
} finally {
if (jedis != null) {
jedis.close();
//3. 关闭连接
}
}
连接池方式
步骤
- 创建连接池配置对象,进行配置
- 根据配置对象创建连接池对象
- 从连接池中借用Jedis对象
- 通过Jedis执行命令,返回Jedis执行结果
- 归还Jedis连接(关闭操作不再是关闭,而是归还)
代码
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); //若不进行配置,则使用的是默认配置
//1. 创建连接池配置对象,进行配置
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
//2. 根据配置对象创建连接池对象
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
//3. 从连接池中借用Jedis对象
jedis.auth("redis"); //操作数据前设置的密码
String hello = jedis.get("hello");
System.out.println(hello); //world
//4. 通过Jedis执行命令,返回Jedis执行结果
} finally {
if (jedis != null) {
jedis.close();
//5. 归还Jedis连接
}
}
连接池常用配置
在创建好配置对象使用各个配置项的set方法进行设置
资源控制参数
配置项 | 含义 | 默认值 |
---|---|---|
maxTotal | 连接池中最大连接数 | 8 |
maxIdle | 连接池中最大空闲连接数,超过此数会释放连接 | 8 |
minIdle | 连接池中最少空闲连接数,不够会向数据库申请 | 0 |
jmxEnabled | 是否开启jmx监控,用于jmx监控系统监控 | true |
借还参数
配置项 | 含义 | 默认值 |
---|---|---|
blockWhenExhausted | 当连接池中连接耗尽,申请连接者是否等待 | true |
maxWaitMillis | 当连接池中连接耗尽,申请连接者等待超时时间 | -1(死等) |
testOnBorrow | 向连接池中借用连接时,是否检测该连接的有效性(ping检测) | false |
testOnReturn | 向连接池中归还连接时,是否检测该连接的有效性(ping检测) | false |
空闲连接检测
配置项 | 含义 | 默认值 |
---|---|---|
testWhileldle | 是否开启空闲连接检测 | false |
timeBetweenEvictionRunsMillis | 空闲检测周期,单位毫秒 | -1(不检测) |
minEvictionTimeMillis | 连接最小空闲时间,超过该时间会释放掉连接,单位毫秒 | 100*60*30(30分钟) |
numTestsPerEvictionRun | 做空闲检测时的采样数 | false |
管道
客户端要求对服务端执行批量的命令时,由于网络延时,每条命令若是单个发送就会让大量的时间浪费在网络延时上,虽然有mset
和mget
这样的批量操作,但是这样的批量操作是针对一种的操作,若需要打包不同的命令一并发送,就需要管道了,即批处理,使用时要注意:
-
管道打包好的命令集操作并非原子操作
-
只能作用一个Redis节点上
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.auth("redis"); //操作数据前设置的密码
Pipeline pipeline = jedis.pipelined(); //获取管道对象
for (int i = 0; i < 10; i++) { //循环打包命令
pipeline.hset("hashKey", "field" + i, "value" + i);
}
List<Object> objects = pipeline.syncAndReturnAll(); //发送命令,若不管返回结果则使用pipeline.sync()方法
System.out.println(objects); //输出返回结果
node连接Redis
使用npm install redis --save
在项目中安装redis驱动程序
const redis = require("redis"); //导入redis模块
const client = redis.createClient(6379, "127.0.0.1", { password: "redis" }); //获取redis连接对象
client.on("error", function (err) { //监听连接出错
throw err;
});
client.once("connect", () => { //监听连接建立成功
client.set("key", "value", (err, data) => {
if (err) throw err;
console.log(data);
});
client.get("key", (err, data) => {
if (err) throw err;
console.log(data);
});
client.quit(); //关闭连接
})
Comments NOTHING