2.1 准备工作
首先我们在Linux中开启redis服务:
1 2 3
| 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 程序,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest { @Test public void test1() { Jedis jedis = new Jedis("192.168.111.152", 6379);
String userName = jedis.get("userName"); System.out.println(userName); jedis.close(); } }
|
是不是十分简单,首先我们获取到了 Jedis 的实例,需要传入的参数也是十分易懂,即运行 Redis 的主机的 IP 地址和 Redis 的端口号。然后直接使用 get 方法就获取到了 userName 的 value 值。
运行程序,如果你没有导入上面的 hamcrest-all
包的话,可能会出现这个错误:
导入后,运行结果如下:
很不幸,再次出现了错误,错误原因是说连接被拒绝,这是因为我们的 Redis 的配置文件中默认只允许本机访问,停 止Redis 服务,修改配置文件:
1 2
| 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 为例:
1
| wxs@ubuntu:~$sudo iptables -A INPUT -p tcp –dport 6379 -j ACCEPT #开放本机6379端口
|
2.3 Jedis连接池
每使用一次就 new 一个 Jedis 实例感觉不是很靠谱,Jedis 和数据库连接库一样,都有连接池,即 JedisPool
,它的配置很简单。配置好连接池后以后直接从连接池中取 Jedis 对象就可以了。测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Test public void test2() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMinIdle(5); poolConfig.setMaxIdle(10); poolConfig.setMaxTotal(30); JedisPool pool = new JedisPool(poolConfig,"192.168.111.152", 6379); Jedis jedis = pool.getResource(); jedis.set("age", "20"); System.out.println(jedis.get("age")); jedis.close(); pool.close(); }
|
2.4 封装成工具类
上面完成了 Redis 的基本使用,我们可以把上面的 Redis 连接池封装成一个工具类,其他地方的代码直接调用工具类来执行即可。
首先在 src 下面新建一个配置文件 redis.properties,把一些配置信息存储在配置文件中:
redis.properties1 2 3 4 5 6 7 8
| redis.ip = 192.168.111.152 redis.port = 6379
redis.minIdle = 5 redis.maxIdle = 10 redis.maxTotal = 30
|
新建 JedisUtils.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| 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 JedisUtils { private static JedisPool jedisPool = null;
public static Jedis getJedis() { if(jedisPool == null) { initJedisPool(); } return jedisPool.getResource(); }
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(); } } }
|
编写测试用例,运行程序:
1 2 3 4 5 6
| @Test public void test3() { Jedis jedis = JedisUtils.getJedis(); System.out.println(jedis.get("age")); JedisUtils.closeJedis(jedis); }
|