Redis初探(2)——Jedis的使用

2.1 准备工作

首先我们在Linux中开启redis服务:

wxs@ubuntu:/usr/local/redis/src$ ./redis-server ../redis.conf 
wxs@ubuntu:/usr/local/redis/src$ ps auxc | grep redis
wxs        5278  0.0  0.4  51828  8408 ?        Ssl  20:12   0:00 redis-server

上一节中我们只是在Linux主机中简单的测试了下 Redis 的使用,但是那样并没有什么实际用处,我们可以在程序中去远程的访问 Redis。

我们以 Java 为例,想要在 Java 程序中使用 Redis,首先我们需要借助第三方库 jedis,导入需要的包:

为了方便测试,还需导包:

2.2 第一个Jedis程序

导完包后,我们编写第一个Jedis程序,代码如下:

import org.junit.Test;

import redis.clients.jedis.Jedis;

/**
 * @className JedisTest.java
 * @author jitwxs
 * @version 创建时间:2018年2月27日 下午8:21:10   
*/
public class JedisTest {
	@Test
	public void test1() {
		// 1.获得连接对象。参数为redis所在的服务器地址及端口号
		Jedis jedis = new Jedis("192.168.111.152", 6379);

		// 2.获得数据
		String userName = jedis.get("userName");
		System.out.println(userName);
		
		jedis.close();
	}
}

是不是十分简单,首先我们获取到了Jedis的实例,需要传入的参数也是十分易懂,即运行Redis的主机的IP地址和Redis的端口号。然后直接使用get方法就获取到了userName的value值。

运行程序,如果你没有导入上面的hamcrest-all包的话,可能会出现这个错误:

导入后,运行结果如下:

很不幸,再次出现了错误,错误原因是说连接被拒绝,这是因为我们的Redis的配置文件中默认只允许本机访问,停止Redis服务,修改配置文件:

wxs@ubuntu:/usr/local/redis/src$ ./redis-cli shutdown
wxs@ubuntu:/usr/local/redis/src$ sudo vim ../redis.conf 

将配置文件中的bind参数修改为0.0.0.0,即所有主机都能访问:

重新启动Redis,并运行Java程序:

我这里已经能够成功取出值了,如果这个时候你还是出现了错误,且错误信息是连接超时(connention timeout…),可能是因为Linux主机没有开放Redis的端口,导致我们远程连接被拒绝。以iptables为例:

wxs@ubuntu:~$sudo iptables -A INPUT -p tcp –dport 6379 -j ACCEPT #开放本机6379端口

2.3 Jedis连接池

每使用一次就new一个Jedis实例感觉不是很靠谱,Jedis和数据库连接库一样,都有连接池,即JedisPool,它的配置很简单。配置好连接池后以后直接从连接池中取Jedis对象就可以了。测试代码如下:

@Test
public void test2() {
	//1. 创建Jedis连接池配置(包含许多配置,这里只配置了3个)
	JedisPoolConfig poolConfig = new JedisPoolConfig();
	// 设置最小和最大闲置个数
	poolConfig.setMinIdle(5);
	poolConfig.setMaxIdle(10);
	// 设置连接池最大个数
	poolConfig.setMaxTotal(30);
	
	//2. 创建Jedis连接池
	JedisPool pool = new JedisPool(poolConfig,"192.168.111.152", 6379);
	
	//3. 从连接池中获取Jedis对象
	Jedis jedis = pool.getResource();
	
	//4.操纵数据
	jedis.set("age", "20");
	System.out.println(jedis.get("age"));
	
	//5.关闭资源
	jedis.close();
	pool.close();
}

2.4 封装成工具类

上面完成了Redis的基本使用,我们可以把上面的Redis连接池封装成一个工具类,其他地方的代码直接调用工具类来执行即可。

首先在src下面新建一个配置文件redis.properties,把一些配置信息存储在配置文件中:

#Redis连接信息
redis.ip = 192.168.111.152
redis.port = 6379

#Redis配置信息
redis.minIdle = 5
redis.maxIdle = 10
redis.maxTotal = 30

新建JedisUtils.java:

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;

/**
 * @className JedisUtils.java
 * @author jitwxs
 * @version 创建时间:2018年2月27日 下午11:56:55   
*/
public class JedisUtils {
	private static JedisPool jedisPool = null;
	
	/**
	 * 获取连接
	 * @author jitwxs
	 * @version 创建时间:2018年2月28日 上午12:06:00 
	 * @return
	 */
	public static Jedis getJedis() {
		if(jedisPool == null) {
			initJedisPool();
		}
		return jedisPool.getResource();
	}
	
	/**
	 * 关闭连接
	 * @author jitwxs
	 * @version 创建时间:2018年2月28日 上午12:06:59 
	 * @param jedis
	 */
	public static void closeJedis(Jedis jedis) {  
        jedis.close();  
    }
	
	private static void initJedisPool() {
		InputStream in = JedisUtils.class.getClassLoader().getResourceAsStream("redis.properties");
		Properties properties = new Properties();
		try {
			properties.load(in);
			JedisPoolConfig poolConfig = new JedisPoolConfig();
			poolConfig.setMinIdle(Integer.parseInt(properties.getProperty("redis.minIdle")));
			poolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("redis.maxIdle")));
			poolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("redis.maxTotal")));

			jedisPool = new JedisPool(poolConfig, properties.getProperty("redis.ip"),
					Integer.parseInt(properties.getProperty("redis.port")));
		} catch (IOException e) {
			System.out.println("载入配置文件错误");
			e.printStackTrace();
		}
	}
}

编写测试用例,运行程序:

@Test
public void test3() {
	Jedis jedis = JedisUtils.getJedis();
	System.out.println(jedis.get("age"));
	JedisUtils.closeJedis(jedis);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值