Redis入门第三讲——在Java程序中通过Jedis连接Redis

Jedis介绍

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java、C、C#、C++、php、Node.js、Go等。在官方网站里罗列了一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis等等,其中官方推荐使用Jedis和Redisson,在企业中用的最多的就是Jedis,所以下面我们就重点学习下Jedis。
Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

Java连接Redis

首先,你肯定是要创建一个动态的web项目的,然后导入如下两个jar包:
在这里插入图片描述
接下来,我就要讲讲在Java程序中如何通过Jedis连接Redis了。

通过单实例连接Redis

在src源码目录下新建一个包,例如com.meimeixia.jedis,并在该包下新建一个单元测试类——JedisTest.java。
在这里插入图片描述
这时,你一运行以上程序,就很有可能出现连接超时的现象,也即抛出如下异常:
在这里插入图片描述
为啥会报异常呢?因为Linux的防火墙默认只对外开放了一个22的端口,其他的端口(自然包括6379)都没打开。那又该怎么解决呢?很简单,把Linux的防火墙设置一下,让它对Redis的6379端口号放行即可。笔者使用的是CentOS 7.6这个版本的Linux系统,而CentOS 7.X默认使用的是firewalld作为防火墙,它与CentOS 6.X是不同的。
那么怎样设置Linux CentOS 7.6的防火墙呢?首先,使用cd /etc/firewalld/zones命令切换到/etc/firewalld/zones目录中,然后使用firewall-cmd --permanent --add-port=6379/tcp命令来添加一个6379端口,修改成功之后需要使用service firewalld restart命令来重启firewalld服务。
在这里插入图片描述
此时,有可能你运行上面的程序,还是会报错,比如抛出如下异常:

Could not connect to Redis at 192.168.81.129:6379: Connection refused

我就出现过这种错误,确实令人恼火,那该咋解决呢?我在网上找到了解决方案——打开Redis的配置文件,即redis.conf,找到下面的内容。
在这里插入图片描述
修改redis.conf配置文件为
在这里插入图片描述
此时,你再次运行单元测试类的test1方法,就会输出你想要的内容了。

通过连接池连接Redis

如果我们要通过Redis连接池获取一个连接Redis的资源,那么得首先创建该Redis连接池的配置对象,然后再使用此配置对象创建出连接池。
在这里插入图片描述
温馨提示:在实际开发中,Redis连接池是不会关闭掉的。
像上面这样写代码,也不行啊!在实际开发中是不可能频繁地创建Redis连接池的,池子只须创建一次即可,所以,我们还得抽取一个工具类,专门用于创建Redis连接池(而且只创建一次)和从池子中获取连接Redis的资源。

package com.meimeixia.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtils {
	
	private static JedisPool pool = null;
	
	static {
		//获得池子对象
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxIdle(30);//设置最大闲置个数,
		poolConfig.setMinIdle(10);//设置最小闲置个数
		poolConfig.setMaxTotal(50);//设置最大连接数
		pool = new JedisPool(poolConfig, "192.168.81.130", 6379);
	}
	
	//获得jedis资源的方法
	public static Jedis getJedis() {
		return pool.getResource();
	}
	
	public static void main(String[] args) {
		Jedis jedis = getJedis();
		System.out.println(jedis.get("xxx"));
	}
	
}

像上面这样写不是不可以,但把Redis所在服务器的IP地址和端口号写死在程序中,着实有点不妥,那么有没有更加优秀一点的做法呢?我们可以在src源码目录下新建一个redis.properties配置文件,内容如下:
在这里插入图片描述
这样子把Redis所在服务器的IP地址、端口号、…写在一个配置文件,然后在工具类中加载该配置文件,岂不更好!

package com.meimeixia.jedis;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtils {
	
	private static JedisPool pool = null;
	
	static {
		//加载配置文件
		InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
		Properties prop = new Properties();
		try {
			prop.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//获得池子对象
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxIdle(Integer.parseInt(prop.get("redis.maxIdle").toString()));//设置最大闲置个数,
		poolConfig.setMinIdle(Integer.parseInt(prop.get("redis.minIdle").toString()));//设置最小闲置个数
		poolConfig.setMaxTotal(Integer.parseInt(prop.get("redis.maxTotal").toString()));//设置最大连接数
		pool = new JedisPool(poolConfig, prop.getProperty("redis.url"), Integer.parseInt(prop.get("redis.port").toString()));
	}
	
	//获得jedis资源的方法
	public static Jedis getJedis() {
		return pool.getResource();
	}
	
	public static void main(String[] args) {
		Jedis jedis = getJedis();
		System.out.println(jedis.get("xxx"));
	}
	
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值