1、创建一个Maven项目
2、在src下的pom.xml文件里,添加相关包引用
1 23 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 4.0.0 6 7com.otwb 8redisLink 91.0-SNAPSHOT 10 1112 13 49 50 5114 18 19junit 15junit 164.12 1720 24 25mysql 21mysql-connector-java 228.0.18 2326 30 31redis.clients 27jedis 282.9.0 2932 36 37commons-dbutils 33commons-dbutils 341.5 3538 42 43org.apache.commons 39commons-pool2 402.5.0 4144 48c3p0 45c3p0 460.9.1.2 47
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 Listhmget = 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 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 name = jedis.smembers("name"); 80 //输出获取到的Set类型数据(输出的顺序是无序的) 81 System.out.println(name); 82 System.out.println("\n"); 83 //获取当前redis数据库中,所有key,以Set集合的方式返回数据 84 Set set = jedis.keys("*"); 85 Iterator 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 field3 = jedis.zrangeByScore("field3", 0, 5); 103 //用迭代器循环输出 104 Iterator iterator = field3.iterator(); 105 while(iterator.hasNext()){ 106 System.out.println(iterator.next()); 107 } 108 RedisUtils.returnResource(jedis); 109 } 110 }
。