IDEA连接Redis

1、创建一个Maven项目

 

2、在src下的pom.xml文件里,添加相关包引用

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.otwb</groupId>
 8     <artifactId>redisLink</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <dependencies>
12         <!--用于单元测试的包-->
13         <dependency>
14             <groupId>junit</groupId>
15             <artifactId>junit</artifactId>
16             <version>4.12</version>
17         </dependency>
18         <!--mysql数据库的jdbc驱动包:用于连接mysql数据库-->
19         <dependency>
20             <groupId>mysql</groupId>
21             <artifactId>mysql-connector-java</artifactId>
22             <version>8.0.18</version>
23         </dependency>
24         <!--redis数据库的连接驱动包-->
25         <dependency>
26             <groupId>redis.clients</groupId>
27             <artifactId>jedis</artifactId>
28             <version>2.9.0</version>
29         </dependency>
30         <!--数据库工具包:用于操作数据库-->
31         <dependency>
32             <groupId>commons-dbutils</groupId>
33             <artifactId>commons-dbutils</artifactId>
34             <version>1.5</version>
35         </dependency>
36         <!--对象池驱动包:用于存放我们需要池化的对象,如创建redis数据库连接池-->
37         <dependency>
38             <groupId>org.apache.commons</groupId>
39             <artifactId>commons-pool2</artifactId>
40             <version>2.5.0</version>
41         </dependency>
42         <!--c3p0数据库连接池包-->
43         <dependency>
44             <groupId>c3p0</groupId>
45             <artifactId>c3p0</artifactId>
46             <version>0.9.1.2</version>
47         </dependency>
48     </dependencies>
49 
50 
51 </project>

 

3、创建redis连接池工具包

 1 package utils;
 2 
 3 import redis.clients.jedis.Jedis;
 4 import redis.clients.jedis.JedisPool;
 5 import redis.clients.jedis.JedisPoolConfig;
 6 
 7 public class RedisUtils {
 8     //服务器IP地址
 9     private static String ADDR = "43.109.234.69";
10     //端口
11     private static int PORT = 6379;
12     //连接超时的时间  
13     private static int TIMEOUT = 10000;
14     //密码
15     private static String AUTH = "123";
16     //数据库模式是16个数据库(0~15),这里设置第一个为默认数据库
17     public static final int DEFAULT_DATABASE = 0;
18     //连接实例的最大连接数
19     private static int MAX_ACTIVE = 1024;
20     //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
21     private static int MAX_IDLE = 200;
22     //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
23     private static int MAX_WAIT = 10000;
24     //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
25     private static boolean TEST_ON_BORROW = true;
26     //创建一个redis数据库连接池
27     private static JedisPool jedisPool = null;
28 
29     //初始化Redis连接池(静态代码块)
30     static {
31         try {
32             //新建连接池的配置参数
33             JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
34             //指定连接实例的最大连接数
35             jedisPoolConfig.setMaxTotal(MAX_ACTIVE);
36             //指定一个pool最多有多少个状态为idle(空闲的)的jedis实例
37             jedisPoolConfig.setMaxIdle(MAX_IDLE);
38             //指定等待可用连接的最大时间,单位毫秒
39             jedisPoolConfig.setMaxWaitMillis(MAX_WAIT);
40             //在borrow一个jedis实例时,是否提前进行validate操作
41             jedisPoolConfig.setTestOnBorrow(TEST_ON_BORROW);
42             //初始化Redis连接池
43             jedisPool = new JedisPool(jedisPoolConfig, ADDR, PORT, TIMEOUT,AUTH,DEFAULT_DATABASE);
44             //jedisPool = new JedisPool(jedisPoolConfig, ADDR, PORT);
45         } catch (Exception e) {
46             e.printStackTrace();
47         }
48     }
49 
50     //获取Jedis实例
51     public synchronized static Jedis getJedis() {
52         try {
53             if (jedisPool != null) {
54                 Jedis jedis = jedisPool.getResource();
55                 System.out.println("redis--服务正在运行: "+jedis.ping());
56                 return jedis;
57             } else {
58                 return null;
59             }
60         } catch (Exception e) {
61             e.printStackTrace();
62             return null;
63         }
64     }
65 
66     //释放资源
67     public static void returnResource(final Jedis jedis) {
68         if(jedis != null) {
69             jedisPool.returnResource(jedis);
70         }
71     }
72 }

 

4、在src——main——java下添加RedisLinkTest类,测试连接操作Redis数据库

  1 import org.junit.Test;
  2 import redis.clients.jedis.Jedis;
  3 import utils.RedisUtils;
  4 
  5 import java.util.Iterator;
  6 import java.util.List;
  7 import java.util.Set;
  8 
  9 public class RedisLinkTest {
 10     //@Test表示这个方法是单元测试的方法
 11     //连接并添加String类型数据
 12     @Test
 13     public void fun1() {
 14         //直接连接redis数据库
 15         Jedis jedis = new Jedis("43.109.234.69",6379);
 16         //设置连接密码
 17         jedis.auth("123");
 18         //添加String类型数据
 19         jedis.set("field1","i am field1");
 20         //输出添加的数据(根据键,输出对应的值)
 21         System.out.println(jedis.get("field1"));
 22         //删除String类型数据(根据键删除)
 23         jedis.del("field1");
 24         //输出数据,查看是否删除成功
 25         System.out.println(jedis.get("field1"));
 26     }
 27 
 28     //连接并添加hash类型数据(我理解为给String类型的数据进行了分类,每个hash可以存储2^32-1个键值对)
 29     @Test
 30     public void fun2(){
 31         //通过连接池方式连接redis数据库
 32         Jedis jedis = RedisUtils.getJedis();
 33         //添加hash类型数据
 34         jedis.hset("hset1","name","张三");
 35         jedis.hset("hset1","age","22");
 36         jedis.hset("hset1","sex","男");
 37         //获取数据
 38         List<String> hmget = jedis.hmget("hset1", "name","age","sex");
 39         //输出
 40         System.out.println(hmget);
 41         //删除
 42         jedis.hdel("hset1","name","sex");
 43         //删除后再输出,看看是否删除成功
 44         System.out.println(jedis.hmget("hset1", "name","age","sex"));
 45         RedisUtils.returnResource(jedis);
 46     }
 47 
 48     //连接并添加List类型数据(队列,按照插入顺序排序,可以添加一个元素到列表的头部(左边),或者尾部(右边))
 49     @Test
 50     public void fun3() {
 51         //通过连接池方式连接redis数据库
 52         Jedis jedis = RedisUtils.getJedis();
 53         //添加List类型数据,lpush添加到列表头部,即后添加的数据在最前面
 54         jedis.lpush("field2","aaa");
 55         jedis.lpush("field2","bbb");
 56         jedis.lpush("field2","ccc");
 57         //从索引1的位置获取到索引6位置的值,因为超出了实际索引2,所以后面会继续循环输出
 58         List<String> field2 = jedis.lrange("field2", 0, 6);
 59         //输出添加的键值对
 60         for(String item:field2){
 61             System.out.println(item);
 62         }
 63         RedisUtils.returnResource(jedis);
 64     }
 65 
 66     //连接并添加Set类型数据(一堆不重复值的组合)
 67     @Test
 68     public void fun4(){
 69         //通过连接池方式连接redis数据库
 70         Jedis jedis = RedisUtils.getJedis();
 71         //添加Set类型数据
 72         jedis.sadd("name","zhangsan");
 73         jedis.sadd("name","lisi");
 74         jedis.sadd("name","lisi");  //同一个数据再次添加,会覆盖上一次的
 75         jedis.sadd("age","16");
 76         jedis.sadd("sex","nan");
 77         jedis.sadd("address","china");
 78         //获取Set类型数据
 79         Set<String> name = jedis.smembers("name");
 80         //输出获取到的Set类型数据(输出的顺序是无序的)
 81         System.out.println(name);
 82         System.out.println("\n");
 83         //获取当前redis数据库中,所有key,以Set集合的方式返回数据
 84         Set<String> set = jedis.keys("*");
 85         Iterator<String> iterator = set.iterator();
 86         while(iterator.hasNext()){
 87             System.out.println(iterator.next());
 88         }
 89         RedisUtils.returnResource(jedis);
 90     }
 91 
 92     //连接并添加ZSet类型数据(zset是set的升级版,它在set的基础上增加了顺序属性score,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序)
 93     @Test
 94     public void fun5(){
 95         //通过连接池方式连接redis数据库
 96         Jedis jedis = RedisUtils.getJedis();
 97         //添加zset型数据
 98         jedis.zadd("field3",1,"hhh");
 99         jedis.zadd("field3",0,"jjj");
100         jedis.zadd("field3",3,"bbb");
101         //获取set型数据
102         Set<String> field3 = jedis.zrangeByScore("field3", 0, 5);
103         //用迭代器循环输出
104         Iterator<String> iterator = field3.iterator();
105         while(iterator.hasNext()){
106             System.out.println(iterator.next());
107         }
108         RedisUtils.returnResource(jedis);
109     }
110 }

 

posted @ 2019-11-28 11:03  打点  阅读(23682)  评论(0编辑  收藏  举报