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 }
。