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
,导入需要的包:
- jedis 点我下载
- commons-pool 点我下载
为了方便测试,还需导包:
- junit 点我下载
- hamcrest-all(可能用到) 点我下载
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);
}
还没有评论,来说两句吧...