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

亦凉 2022-05-29 23:22 265阅读 0赞

2.1 准备工作

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

  1. wxs@ubuntu:/usr/local/redis/src$ ./redis-server ../redis.conf
  2. wxs@ubuntu:/usr/local/redis/src$ ps auxc | grep redis
  3. 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程序,代码如下:

  1. import org.junit.Test;
  2. import redis.clients.jedis.Jedis;
  3. /** * @className JedisTest.java * @author jitwxs * @version 创建时间:2018年2月27日 下午8:21:10 */
  4. public class JedisTest {
  5. @Test
  6. public void test1() {
  7. // 1.获得连接对象。参数为redis所在的服务器地址及端口号
  8. Jedis jedis = new Jedis("192.168.111.152", 6379);
  9. // 2.获得数据
  10. String userName = jedis.get("userName");
  11. System.out.println(userName);
  12. jedis.close();
  13. }
  14. }

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

运行程序,如果你没有导入上面的hamcrest-all包的话,可能会出现这个错误:
20180227204212520
导入后,运行结果如下:
20180227204332240
很不幸,再次出现了错误,错误原因是说连接被拒绝,这是因为我们的Redis的配置文件中默认只允许本机访问,停止Redis服务,修改配置文件:

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

将配置文件中的bind参数修改为0.0.0.0,即所有主机都能访问:
20180227211443295
重新启动Redis,并运行Java程序:
20180227214326760
我这里已经能够成功取出值了,如果这个时候你还是出现了错误,且错误信息是连接超时(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. @Test
  2. public void test2() {
  3. //1. 创建Jedis连接池配置(包含许多配置,这里只配置了3个)
  4. JedisPoolConfig poolConfig = new JedisPoolConfig();
  5. // 设置最小和最大闲置个数
  6. poolConfig.setMinIdle(5);
  7. poolConfig.setMaxIdle(10);
  8. // 设置连接池最大个数
  9. poolConfig.setMaxTotal(30);
  10. //2. 创建Jedis连接池
  11. JedisPool pool = new JedisPool(poolConfig,"192.168.111.152", 6379);
  12. //3. 从连接池中获取Jedis对象
  13. Jedis jedis = pool.getResource();
  14. //4.操纵数据
  15. jedis.set("age", "20");
  16. System.out.println(jedis.get("age"));
  17. //5.关闭资源
  18. jedis.close();
  19. pool.close();
  20. }

20180227234859583

2.4 封装成工具类

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

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

  1. #Redis连接信息
  2. redis.ip = 192.168.111.152
  3. redis.port = 6379
  4. #Redis配置信息
  5. redis.minIdle = 5
  6. redis.maxIdle = 10
  7. redis.maxTotal = 30

新建JedisUtils.java:

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisPool;
  6. import redis.clients.jedis.JedisPoolConfig;
  7. /** * @className JedisUtils.java * @author jitwxs * @version 创建时间:2018年2月27日 下午11:56:55 */
  8. public class JedisUtils {
  9. private static JedisPool jedisPool = null;
  10. /** * 获取连接 * @author jitwxs * @version 创建时间:2018年2月28日 上午12:06:00 * @return */
  11. public static Jedis getJedis() {
  12. if(jedisPool == null) {
  13. initJedisPool();
  14. }
  15. return jedisPool.getResource();
  16. }
  17. /** * 关闭连接 * @author jitwxs * @version 创建时间:2018年2月28日 上午12:06:59 * @param jedis */
  18. public static void closeJedis(Jedis jedis) {
  19. jedis.close();
  20. }
  21. private static void initJedisPool() {
  22. InputStream in = JedisUtils.class.getClassLoader().getResourceAsStream("redis.properties");
  23. Properties properties = new Properties();
  24. try {
  25. properties.load(in);
  26. JedisPoolConfig poolConfig = new JedisPoolConfig();
  27. poolConfig.setMinIdle(Integer.parseInt(properties.getProperty("redis.minIdle")));
  28. poolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("redis.maxIdle")));
  29. poolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("redis.maxTotal")));
  30. jedisPool = new JedisPool(poolConfig, properties.getProperty("redis.ip"),
  31. Integer.parseInt(properties.getProperty("redis.port")));
  32. } catch (IOException e) {
  33. System.out.println("载入配置文件错误");
  34. e.printStackTrace();
  35. }
  36. }
  37. }

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

  1. @Test
  2. public void test3() {
  3. Jedis jedis = JedisUtils.getJedis();
  4. System.out.println(jedis.get("age"));
  5. JedisUtils.closeJedis(jedis);
  6. }

20180228001213330

发表评论

表情:
评论列表 (有 0 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Jedis 初探

    Jedis是java操作redis的jar包 先说一下如何连接redis 比如在linux操作系统上的话,进入目录,输入 "./redis cli"即可登录。 如果设置了