03-连接Redis

nobility 发布于 2022-10-23 415 次阅读


连接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

直连方式

步骤
  1. 创建Jedis对象
  2. 通过Jedis执行命令,返回Jedis执行结果(所有的方法名与redis-cli客户端的一致)
  3. 关闭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. 关闭连接
  }
}

连接池方式

步骤
  1. 创建连接池配置对象,进行配置
  2. 根据配置对象创建连接池对象
  3. 从连接池中借用Jedis对象
  4. 通过Jedis执行命令,返回Jedis执行结果
  5. 归还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

管道

客户端要求对服务端执行批量的命令时,由于网络延时,每条命令若是单个发送就会让大量的时间浪费在网络延时上,虽然有msetmget这样的批量操作,但是这样的批量操作是针对一种的操作,若需要打包不同的命令一并发送,就需要管道了,即批处理,使用时要注意:

  • 管道打包好的命令集操作并非原子操作

  • 只能作用一个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(); //关闭连接
})
此作者没有提供个人介绍
最后更新于 2022-10-23